что лучше использовать набор запросов php или функцию mysql? - PullRequest
0 голосов
/ 12 октября 2009

Если у вас есть данные в таблице 1, которые необходимо использовать для возврата данных в таблице 2 для каждой строки, возвращаемой в таблице 1. Что эффективнее использовать набор запросов в PHP, один из которых вставлен в цикл while другого или функция SQL в запросе?

например:

$qry = mysql_query(SELECT date FROM table1)

while($res = mysql_fetch_array($qry))
{
  $qry = mysql_query("SELECT name FROM table2 WHERE date=$res['date']")
}

или сделать это как функцию, которая возвращает идентификатор из таблицы1 в запросе.

Ответы [ 4 ]

3 голосов
/ 12 октября 2009

A (ВЛЕВО / ВПРАВО) ПРИСОЕДИНЯЙТЕСЬ?

Если я не понял вопрос ...

3 голосов
/ 12 октября 2009

Я думаю, что вы ищете JOIN sql синтаксис. Если у вас есть 2 таблицы: сообщения и автор, и вы хотите вернуть сообщения с авторами. Затем вы можете написать следующую инструкцию SQL:

SELECT m.body, a.name FROM message m 
LEFT JOIN author a ON (a.id=m.author_id)

Будет возвращено тело сообщения с соответствующим именем автора

Автор таблицы:

  • id - первичный ключ
  • имя - имя автора

Табличное сообщение:

  • body - текст сообщения
  • author_id - идентификатор автора

UPD1:

Это будет быстрее, чем зацикливание каждого сообщения и выбор автора. Потому что JOIN позволяет вам возвращать все данные в одном запросе (не N x запросов при использовании цикла for).

UPD2:

С вашими таблицами запрос будет выглядеть так:

SELECT t1.date, t2.name FROM table1 t1 LEFT JOIN table2 t2 ON (t2.date=t1.date)
2 голосов
/ 12 октября 2009

Это зависит от того, легче ли найти данные во время цикла while или в самом запросе.

Таким образом, если БД должна основывать подзапрос на результате каждой строки в основном запросе, а в основном запросе насчитывается 1000 строк и 100 результатов, она должна проверить все строки 100 раз, так что это 100 000 подзапросов, которые он выполняет.

Так что думайте, это количество результатов основного запроса. Если ваш цикл while должен запрашивать БД 100 раз, в то время как БД может сделать это намного быстрее и эффективнее за один запрос, это лучше. Но если вам нужно подмножество ответов, которые вы можете сказать «запрос только на основании последнего набора результатов», цикл while лучше.

1 голос
/ 12 октября 2009

Что эффективнее использовать

набор запросов в PHP, один вложенный в цикл while другого

или

функция SQL в запросе

Кажется, ты сам ответил на свой вопрос, не так ли?

Каждый запрос, который вы отправляете в dbms, должен быть отправлен по сети, проанализирован, проанализирован и затем выполнен. Возможно, вы захотите свести к минимуму количество запросов, отправляемых в БД.

Могут быть исключения, например, если обработка данных требует операций, на которые dbms не способен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...