2

我正在尝试为游戏“EVE Online”创建一个项目数据库供我和我的朋友使用,我设置了一个 SQL 服务器并创建了表格等,等等,一切都运行良好。但是,当我尝试从两个不同的表中导入数据并在同一个 html 表元素中将它们相互比较时,我遇到了一个问题。如果我只是从一个包含多列的表中导入,它会完美运行,但是当我尝试选择多个来源时会遇到问题。

我要拉的桌子是......

testmetrics.eve_inv_typestestmetrics.items_sales

理想情况下,我想从表 #1 中导入“name”、“type_id”、“jita_price_sell”列,从表 #2 中导入“price”、“type_id”、“station_id”和“qty_avail”。

我还在 jita_price_sell 和 price 上使用 ROUND 运算符来获得各种商品价格点的 2 位小数近似值。我也有它,以便在表 #2 中仅显示具有正确 station_id 的结果。但是一直报错!

到目前为止,这是我的代码...

<?php
$con = mysql_connect("testmetrics.db.10198246.xxxx.com","xxxx","xxxx");
if (!$con) 
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("testmetrics", $con);
$result = mysql_query("
SELECT testmetrics.eve_inv_types.name, testmetrics.eve_inv_types.type_id, ROUND(testmetrics.eve_inv_types.jita_price_sell, 2) as jita_price_sell, ROUND(testmetrics.items_selling.price, 2) as price, testmetrics.items_selling.qty_avail, testmetrics.items_selling.sation_id, testmetrics.items_selling.type_id 
FROM testmetrics.eve_inv_types, testmetrics.items_selling
WHERE testmetrics.eve_inv_types.type_id = testmetrics.items_selling.type_id, testmetrics.items_selling.station_id = '61000746'");
echo "<table class='sortable'>
<tr>
<th>Item Name</th>
<th>Price (Jita)</th>
<th>Price (K-6K16)</th>
<th>Qty Avail (K-6K16)</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['testmetrics.eve_inv_types.name'] . "</td>";
echo "<td>" . $row['jita_price_sell'] . "</td>";
echo "<td>" . $row['price'] . "</td>";
echo "<td>" . $row['testmetrics.items_selling.qty_avail'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>

您可以提供的任何帮助或见解将不胜感激。我还希望能够做一个数学函数,在那里我testmetrics.eve_inv_types.jita_price_sell + (testmetrics.eve_inv_types.volume * 300)可以得到运输成本,并将其导出到它自己的列中。

非常感谢您要说的任何内容!

编辑:我知道我已经在这里寻求很多帮助,但是,有谁知道如何根据排序的列将返回限制为“前 100 名”?我正在使用 Javascript 插件来轻松排序!

这是为我解决它的代码!

SELECT eve_inv_types.name, 
       eve_inv_types.type_id, 
       Round(eve_inv_types.jita_price_sell, 2) AS jita_price_sell, 
       Round(items_selling.price, 2)           AS price, 
       items_selling.qty_avail,  
       items_selling.type_id 
FROM   eve_inv_types 
       JOIN items_selling
         ON eve_inv_types.type_id = items_selling.type_id 
            AND items_selling.station_id = '61000746' 
4

2 回答 2

0
SELECT eit.name, 
       eit.type_id, 
       Round(eit.jita_price_sell, 2) AS jita_price_sell, 
       Round(eis.price, 2)           AS price, 
       eis.qty_avail, 
       eis.sation_id, 
       eis.type_id 
FROM   eve_inv_types eit 
       JOIN `items_selling` eis 
         ON eit.type_id = eis.type_id 
            AND eis.station_id = '61000746' 
于 2013-02-05T00:43:07.507 回答
0

您可以连接表(假设您有一个连接它们的键),这是一个示例:

table A:
    personId
    firstName
    lastName
    numOfChildren

table B:
    personId
    streetName
    cityName
    countryName

从两者中选择(使用 personID 作为连接键):

SELECT firstName, lastName, numOfChildren, streetName, cityName, countryName
FROM tableA JOIN tableB USING (personId)

如果要限制结果,可以添加:

LIMIT 100

如果您想要前 100 名父母,您可以通过以下方式订购numOfChildren

ORDER BY numOfChildren

最终查询将如下所示:

SELECT firstName, lastName, numOfChildren, streetName, cityName, countryName
FROM tableA JOIN tableB USING (personId)
ORDER BY numOfChildren
LIMIT 100;

- 或者 -

SELECT firstName, lastName, numOfChildren, streetName, cityName, countryName
FROM tableA JOIN tableB ON (tableA.personId=tableB.personId)
ORDER BY numOfChildren
LIMIT 100;

在此处阅读有关加入的更多信息:http: //dev.mysql.com/doc/refman/5.1/en/join.html

于 2013-02-05T00:46:13.590 回答