PHP - слишком много mysql_query ("SELECT ..") ..? - PullRequest
1 голос
/ 04 октября 2009

Привет, я делаю интернет-магазин и показываю дерево категорий и все продукты с их различными вариациями цен, которые я сделал, например, более 150 mysql_query("SELECT ..."); запросов на одной странице. (Если я посчитаю циклы "while").

Это слишком много, и если да, может ли это иметь какой-либо отрицательный эффект? (ofc. загрузка данных занимает больше времени ..)

Также могу ли я каким-либо образом добиться эффекта этого кода, не делая этого таким образом?

$result2 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz");
$result3 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz");
$result4 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz");
$result5 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz");

while( $row2 = mysql_fetch_array( $result2 )) { }
while( $row3 = mysql_fetch_array( $result2 )) { }
while( $row4 = mysql_fetch_array( $result2 )) { }
while( $row5 = mysql_fetch_array( $result2 )) { }

Спасибо, Майк.

Ответы [ 2 ]

13 голосов
/ 04 октября 2009

Обычно хорошей идеей является уменьшение количества выполняемых вами запросов. В этом случае вы можете выбрать строки для всех продуктов в одном запросе, например:

SELECT * FROM ceny WHERE produkt_id IN (?, ?, ?, ...) ORDER BY gramaz

Тогда у вас будет один цикл, который перебирает результаты и заполняет соответствующие переменные:

$ceny = array()
while ($row = mysql_fetch_array($result)) {
    $id = $row['produkt_id'];
    $ceny[$id][] = $row;
}

Теперь $ceny[$produkt_id] содержит список строк из ceny для этого продукта, отсортированный по gramaz.

0 голосов
/ 04 октября 2009

Похоже, ваша ситуация отчаянно нуждается в объединении и, возможно, в некотором AJAX, если вы действительно хотите сократить нагрузку на эту страницу.

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

Итак, ваш текущий подход - циклически проходить по категориям, а затем делать выборку из таблицы элементов, чтобы показать их, верно?

Если это так, и я правильно понимаю, это можно решить с помощью простого соединения. Вы хотите сделать один оператор выбора для таблицы элементов, присоединиться к таблице категорий по внешнему ключу, который есть в таблице элементов, а затем отсортировать по категории.

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

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