Запрос MySQL из нескольких таблиц с ОКРУГЛЕНИЕМ и математикой


Я пытаюсь создать базу данных предметов для игры "EVE Online" для использования мной и моими друзьями, и я настроил SQL-сервер, создал таблицы и тому подобное, и т. Д. И т. Д., И все работает нормально. Однако у меня есть одна проблема, когда я пытаюсь импортировать данные из двух разных таблиц и сравнивать их друг с другом в одном элементе таблицы html. Это отлично работает, если я просто импортирую из одной таблицы с несколькими столбцами, но у меня возникают проблемы, когда я пытаюсь выбрать более одного источник.

Таблицы, из которых я беру, таковы...

testmetrics.eve_inv_types и testmetrics.items_продажа

В идеале я хотел бы импортировать столбцы "имя", "идентификатор типа", "jita_price_sell" из таблицы № 1 и "цена", "идентификатор типа", "идентификатор станции" и "qty_avail" из таблицы № 2.

Я также использую оператор ОКРУГЛЕНИЯ для jita_price_sell и цены, чтобы получить 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' 
Author: Brian Tompsett - 汤莱恩, 2013-02-05

2 answers

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' 
 0
Author: keyboardSmasher, 2013-02-05 00:43:07

Вы можете объединять таблицы (при условии, что у вас есть ключ, который их соединяет), вот пример:

table A:
    personId
    firstName
    lastName
    numOfChildren

table B:
    personId
    streetName
    cityName
    countryName

Выберите из обоих (используя идентификатор пользователя в качестве ключа соединения):

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

 0
Author: Adi, 2013-02-05 00:46:13