Оптимальное решение задачи.

WP

^_^
Оптимальное решение задачи.

Есть таблица с новостями и таблица с комментариями к ним (и не только к ним).
xE_news и xE_comments. При показе новостей нужно получить кол-во комментариев к каждой из них. Вопрос в том, как это сделать оптимальнее, какие лучше сделать индексы.
[sql]
SELECT SQL_CALC_FOUND_ROWS `xE_news`.`id`, `aid`, `timestamp`, `title`, `text`, `username` AS `author`, (SELECT COUNT(*) FROM `xE_comments` WHERE `cat` = 'news' AND `item` = `xE_news`.`id`) AS `comments_num` FROM `xE_news` LEFT JOIN `xE_users` ON `xE_news`.`aid` = `xE_users`.`id` ORDER BY `id` DESC LIMIT 0,5
[/sql]
Спасибо.
 

zerkms

TDD infected
Команда форума
зачем в данном случае тебе нужен подзапрос??
перепиши с LEFT JOIN
потом сделай EXPLAIN запроса, почитай внимательно про оптимизацию в мануале, потом если будет уж совсем плохо - задавай вопрос снова
 

.des.

Поставил пиво кому надо ;-)
а еще можно подумать в направлении, что правильная структура это конечно хорошо.. но комменты пишут не так часто, как смотрят новости :)
 

Solid

Drosera anglica
Мне тоже, как и .des., кажется, что смотреть надо в сторону статики. Т.е. добавить в таблицу с новостями поле comment_count и и там уже просто инкрементировать и декрементировать, в зависимости от действия.
 

sunchess

Новичок
не совсем понял а нелегче сделать объединение таблиц на сравнении сравнивать id новости с id новости в таблице с коментами?

к примеру select count(c.id_com) from com c, news n where n.id_news = c.id_news and id_news = '$id' - примерно так :)
 

SelenIT

IT-лунатик :)
sunchess
Об этом уже сказано тремя постами ранее, причем с правильной подсказкой. А в твоем запросе ни join, ни сама таблица news вообще не нужны.
 
Сверху