Запрос 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'
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'
Вы можете объединять таблицы (при условии, что у вас есть ключ, который их соединяет), вот пример:
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