Помогите с MySQL запросом по пересчету

R34-zevs
На сайте с 15.07.2006
Offline
238
376

Есть у нас запрос такого вида:


SELECT
t.tid
FROM
".DB_PREFIX."_tovari AS t LEFT JOIN
".DB_PREFIX."_catalog AS c ON (c.tovar > 0)
WHERE
c.cataid=t.cataid && t.cid=0

Он выводит все товары, у которых cid=0

Т.е. получается нам нужно посчитать, сколько товаров для конкретной фирмы имеет кол-во cid=0

и нам нужно, чтоб выводил подобный массив

Array(

[cataid] => N

[counter] => M

),

Array(

[cataid] => N1

[counter] => M1

)

и тд

Где N - это id фирмы (cataid),

а M - это кол-во товаров, у которых cid=0 для фирмы с номером N

Подскажите, как поправить запрос или может есть у вас варианты решения данной задачи?

Агентство недвижимости Фабрика Жилья (http://xn--80aacvicll3bzbzgqb.xn--p1ai/)
C
На сайте с 04.02.2005
Offline
291
#1

R34-zevs, Прочитайте написанный запрос ВСЛУХ

и сравните

SELECT 

t.tid
FROM
".DB_PREFIX."_tovari AS t LEFT JOIN
".DB_PREFIX."_catalog AS c ON (c.tovar > 0)
WHERE
c.cataid=t.cataid && t.cid=0

SELECT 

t.tid
FROM
".DB_PREFIX."_tovari AS t LEFT JOIN
".DB_PREFIX."_catalog AS c ON (c.cataid=t.cataid)
WHERE
c.tovar > 0 && t.cid=0


---------- Добавлено 07.08.2013 в 14:27 ----------

есть агрегатные функции count(поле)

и есть

having

R34-zevs
На сайте с 15.07.2006
Offline
238
#2

Chukcha, попробовали ваш вариант, ничего не поменялось.

решили проблему так:

SELECT
c.cataid, ( SELECT COUNT(t.tid) FROM ".DB_PREFIX."_tovari AS t WHERE (c.cataid=t.cataid && t.cid=0) ) AS counter
FROM
".DB_PREFIX."_catalog AS c
WHERE
c.tovar > 0
gormarket
На сайте с 29.12.2010
Offline
47
#3

R34-zevs, а запросом к одной таблице не получится обойтись ?

SELECT DISTINCT t.cataid, COUNT(t.cataid) FROM ".DB_PREFIX."_tovari AS t WHERE t.cid=0 GROUP BY t.cataid

точнее так

SELECT DISTINCT t.cataid, COUNT(t.cataid) AS counter FROM ".DB_PREFIX."_tovari AS t WHERE t.cid=0 GROUP BY t.cataid
Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
C
На сайте с 04.02.2005
Offline
291
#4

а где же

".DB_PREFIX."_catalog AS c ?

Одним запросом - не проблема - заюзать having

R34-zevs
На сайте с 15.07.2006
Offline
238
#5

gormarket, Да, так зато вытаскивает и без нулей

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий