не пойму как лучше, через запрос (если реально), или самим пхп

zaartix

Новичок
не пойму как лучше, через запрос (если реально), или самим пхп

есть 2 таблицы:
price_catalog
id | name
1_| раздел 1
2_| раздел 2
3_| раздел 3
4_| раздел 4

sessions
ssid | price_id | catаlog_id | num
1___|1231____|1_________|2
2___|1232____|1_________|1
3___|1233____|2_________|1
4___|1234____|3_________|1

надо вывести список разделов (price_catalog) и кол-во товаров (num из sessions) в каждом разделе.
т.е. получить такую таблицу:
раздел 1 = 3
раздел 2 = 1
раздел 3 = 1
раздел 4 = 0

Можно такое посредством sql реализовать?
 

ld

Guest
select name, sum(num) from price_catalog,sessions where id=catalog_id group by catalog_id;
только раздел4==0 не выведет.
 

zaartix

Новичок
admin
Это таблица сессий (ес-но в упрощенном виде ее тут нарисовал)

ld
так непойдет, надо все разделы, если их нет в сессиях - тогда им нули или null

Проблема в том, что в sessions могут быть разные price_id в строках, но одинаковые catalog_id, мне нужно суммировать поля num у тех, что имеют одинаковые catalog_id
 

bars_g

Guest
select price_catalog.name, count(sessions.ssid) FROM price_catalog LEFT JOIN sessions ON price_catalog.id=sessions.catalog_id GROUP BY sessions.catalog_id

*невнимательно прочел условие, сорри*
 

ld

Guest
а ну если, как bars_g делает, то
select name, sum(num) from price_catalog left join sessions on id=catalog_id group by catalog_id;
и тогда раздел4==0 тож есть
 

zaartix

Новичок
блин, а вот как добавил свои условия, строки типа
раздел4=0 пропали (пустые). Че я опять накосячил?

[sql]select cat.name, sum(sessions.num) as num
from comp_price_cat as cat
left join comp_sessions as sessions on sessions.cid=cat.id
where sessions.sid='$PHPSESSID' and cat.zakaz=0 group by cat.id[/sql]

-~{}~ 17.08.04 16:23:

ну блин, мистика какая-то

SELECT cat.name, sum( sessions.num ) AS num
FROM comp_price_cat AS cat
LEFT JOIN comp_sessions AS sessions ON sessions.cid = cat.id
WHERE cat.zakaz =0
GROUP BY cat.id

работал неправильно, обрезал нулевые строки, щас все ок. нифига не понимаю

-~{}~ 17.08.04 16:28:

всмысле запустил повторно - сработал, первый раз работал неправильно, хотя НИЧЕГО не изменилось
 

ld

Guest
a " sessions.sid = '$PHPSESSID' " куда дел??..
сначала возник варант :
select cat.name, sum(ses.num) as num from price as cat left join sessions as ses on cat.id=ses.catalog_id where cat.zac=0 and (ses.sid='$PHPSESSID' || ses.catalog_id IS NULL) group by ses.catalog_id;
но не канает.. он раздел4==0 включит.. но не включит не один раздел.. где ses.sid!='$PHPSESSID'... а я так понимаю.. что они тоже должны записаться, как разделХ== 0..
 

zaartix

Новичок
id
неважно, для моей задачи запрос вида:
[sql]SELECT cat.name, sum( sessions.num ) AS num
FROM comp_price_cat AS cat
LEFT JOIN comp_sessions AS sessions ON sessions.cid = cat.id
WHERE cat.zakaz =0
GROUP BY cat.id[/sql]
прошел нормально. Всем спасибо.
 
Сверху