У меня есть две таблицы,
agent(id, name, password, ..., shop_id);
shop(id, name, address, ...);
Теперь я хочу получить имя магазина для агента, что мне делать? Должен ли я использовать два последовательных sql-запроса,
<?php
$qstr = <<<SQL
SELECT * FROM agent WHERE id=$id;
SQL;
$result = $conn->query($qstr);
$row = $result->fetch_assoc();
foreach ($row as $key => $value)
$$key = $value;
$qstr = <<<SQL
SELECT name FROM shop WHERE id=$shop_id;
SQL;
$result = $conn->query($qstr);
$row = $result->fetch_assoc();
$shop_name = $row['name'];
?>
Или мне нужно создать представление для этого выбора,
CREATE VIEW f_agent AS SELECT agent.id AS id ,agent.name AS name, shop.id AS shop_id, shop.name AS shop_name FROM agent, shop WHERE agent.shop_id=shop.id;
Или я должен просто использовать sql,
SELECT agent.id AS id ,agent.name AS name, shop.id AS shop_id, shop.name AS shop_name FROM agent, shop WHERE agent.shop_id=shop.id and agent.id=$id;
Какой лучший способ сделать это?
Спасибо.
Если это только конкретный запрос, который вы будете использовать на странице в интерфейсе, простой SQL должен работать лучше всего. Нет смысла создавать представление для КАЖДОГО ОДИНОЧНОГО возможного набора результатов, который вы хотите от MySQL.
Если я могу сделать предложение, пожалуйста, рассмотрите синтаксис SQL92 ANSI
SELECT agent.id AS id ,agent.name AS name, shop.id AS shop_id, shop.name AS shop_name
FROM agent
INNER JOIN shop ON agent.shop_id=shop.id
WHERE agent.id=$id;
В условиях нет вы должны многократно переходить к MySQL с PHP, используя цикл для такого столбца поиска для набора результатов.
Я бы не использовал представление для такого простого запроса, и использование двух отдельных результатов кажется бессмысленным, поэтому я бы предложил использовать последний запрос
Я новичок в выполнении запросов, подобных этому, но я считаю этот поток очень информативным. Будет что-то вроде этой работы также?
$query = "SELECT shop.id, shop.name, agent.name FROM shop LEFT JOIN agent ON shop.id = agent.id";
$res = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($res)){
echo $row['shop']['name']. " - ". $row['agent']['name'];
echo "<br />";
}