SELECT COUNT(i.*) FROM items AS i,categories AS c WHERE i.category=$category OR (c.id=i.category AND c.pid=$category) GROUP BY i.id
конструкция - COUNT(i.*) неверная, это я знаю но чем её заменить?!

смысл запроса:
таблицы: items - список товаров(поле category содержит id записи в таблице категорий к которой относится товар),
category - список категорий( поле pid содержит id родительской категории или 0)
задача: для пагинатора надо получить кол.во товаров в выбранной категории($category).
P.S. дайте ссылку на хороший учебник по mysql который можно читать оффлаин(читаю в PDA). Заранее спасиб

Спустя 16 минут, 50 секунд (5.04.2010 - 10:59) sergeiss написал(а):
А кто тебе мешает просто написать COUNT(*)?
Спустя 11 минут, 38 секунд (5.04.2010 - 11:11) mad/crs написал(а):
если просто COUNT(*) то в ответ приходит общее ко.во записей а не записей соответствующих фильтру.
Спустя 55 секунд (5.04.2010 - 11:12) glock18 написал(а):
убрать group by при подсчете. если будет слишком большой каунт, то можно считать count(distinct i.id) - будет то же самое, только каунт будет правильный.
Спустя 6 часов, 52 минуты, 37 секунд (5.04.2010 - 18:04) vagrand написал(а):
Юзай SQL_CALC_FOUND_ROWS и found_rows() - это самый верный вариант
Спустя 1 час, 1 минута, 11 секунд (5.04.2010 - 19:05) glock18 написал(а):
Цитата (vagrand @ 5.04.2010 - 15:04) |
Юзай SQL_CALC_FOUND_ROWS и found_rows() - это самый верный вариант |
ну прямо самый верный. если считать таким образом, то mysql проходит по всей таблице независимо от лимита и индексов.
Спустя 3 часа, 30 минут, 32 секунды (5.04.2010 - 22:36) Nikitian написал(а):
Цитата (glock18 @ 5.04.2010 - 16:05) | ||
ну прямо самый верный. если считать таким образом, то mysql проходит по всей таблице независимо от лимита и индексов. |
Индексы всё-таки используются, если они используются и в оригинальном запросе, а вот лимиты - да, на больших таблицах проблема. Я так вообще обычными каунтами, но у меня все запросы в мемкеше плавают и пока не протухнут помогают снижать нагрузку. Ну и explain каждого запроса - просто обязательно.
Спустя 46 минут, 15 секунд (5.04.2010 - 23:22) mad/crs написал(а):
Работает на 5+!
Спасибо glock18 ! Одно только гложет... почему же не работает через COUN(i.id)/COUNT(i.*)... интересно поподробнее понять механизм таких вот "извращений". 
SELECT COUNT(DISTINCT i.id) AS total FROM items AS i,categories AS c WHERE i.category=36 OR (c.id=i.category AND c.pid=36)
А кто может посоветовать хороший справочник(скачиваемый но не .chm) по MySQL что бы в предь незадавать глупых вопросов?


SELECT COUNT(DISTINCT i.id) AS total FROM items AS i,categories AS c WHERE i.category=36 OR (c.id=i.category AND c.pid=36)
А кто может посоветовать хороший справочник(скачиваемый но не .chm) по MySQL что бы в предь незадавать глупых вопросов?

Спустя 8 часов, 3 минуты, 15 секунд (6.04.2010 - 07:25) glock18 написал(а):
Не знаю насчет скачиваемости, но лучший определенно этот - http://dev.mysql.com/doc/refman/5.1/en/