|
|
|
| Есть категории, товар в них, расфасовка товара (1кг,5кг,10кг) и цена за единицу товара.
product - таблица продуктов
category - таблица категорий, связана с таблице продуктов по cat_id
product_price - расфасовка и цена за продукт, связана с product по product_id
Ниже приведено два запроса. Одним я вытягиваю категорию товаров, товар + описание, расфасовку и цену на продукты.
Второй запрос должен получить количество емкостей для определенного товара. Например, продукт хранится в емкостях 0,5л, 1л, 2л - итого количество =3, вот это количество и считает второй запрос. Вопрос: можно ли эти два запроса слепить в один?
<?php
$query = "
SELECT pr.product_id pid,
pr.product_title ptitle,
pr.product_descr_price pdescr,
pr.popular_product pop,
pp.id pi,
pp.fasovka pfas,
pp.price pprice,
cat.cat_id cid,
cat.cat_name cname
FROM product pr
LEFT JOIN category cat ON pr.cat_id = cat.cat_id
LEFT JOIN product_price pp ON pr.product_id = pp.product_id
WHERE pr.product_id != 49 AND pr.product_id != 50
ORDER BY cid,pid
";
for($result = mysql_query($query),$b = null,$i=1;$arr = mysql_fetch_assoc($result);$i++) {
$pid = $arr['pid'];
$s = "SELECT COUNT(fasovka) fcount
FROM product_price
WHERE product_id = " . $pid . " GROUP BY product_id";
$res = mysql_query($s);
if(!$res)exit("Error in" . $s . mysql_error());
$count = mysql_result($res,0);
//дальше идет остальной код
}
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(20.12.2009 в 16:19)
| | Должно быть что-то одно — либо группирока с COUNT(), либо вывод всех ... емкостей. Единственное, можно сократить количество запросов в цикле, т.к. первый запрос может возвращать несколько записей с одним и тем же pid.
>$s = "SELECT COUNT(fasovka) fcount
>FROM product_price
>WHERE product_id = " . $pid . " GROUP BY product_id";
Тут группировка по product_id смысла не имеет. И желательно написать COUNT(*), если fasovka не принимает значения NULL. | |
|
|
|
|
|
|
|
для: Fractured#
(20.12.2009 в 16:47)
| | >Единственное, можно сократить количество запросов в цикле, т.к. первый запрос может возвращать несколько записей с одним и тем же pid.
Это я проверяю. Если был такой pid, то уже во второй раз его не берем.
>Тут группировка по product_id смысла не имеет.
Почему?
>если fasovka не принимает значения NULL.
fasovka у меня NOT NULL | |
|
|
|
|
|
|
|
для: Лена
(20.12.2009 в 23:39)
| | > Почему?
Потому что в WHERE условие, оставляющее лишь записи с каким-то одним product_id, т.е. заведомо известно, что группа только одна получится.
> fasovka у меня NOT NULL
Тогда будет быстрее (может и не существенно) COUNT(*) | |
|
|
|