Что лучше, если я хочу получить данные из двух таблиц?

0

У меня есть две таблицы,

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;

Какой лучший способ сделать это?

Спасибо.

Теги:

3 ответа

3
Лучший ответ

Если это только конкретный запрос, который вы будете использовать на странице в интерфейсе, простой 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, используя цикл для такого столбца поиска для набора результатов.

  • 0
    так что запрос на соединение быстрее, чем последовательность запросов?
  • 0
    Это помогает СУБД точно определить, как связаны таблицы, чтобы оптимизировать процесс и получать более предсказуемые запросы. Часто это не так быстро, но это также хорошая практика для лучшей читабельности.
1

Я бы не использовал представление для такого простого запроса, и использование двух отдельных результатов кажется бессмысленным, поэтому я бы предложил использовать последний запрос

0

Я новичок в выполнении запросов, подобных этому, но я считаю этот поток очень информативным. Будет что-то вроде этой работы также?

$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 />";
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню