EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Помогите с банальным SQL запросом, выборка новостей

 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
Помогите с банальным SQL запросом, выборка новостей
Автор Сообщение
madhamster
Согнул ложку
Согнул ложку


Зарегистрирован: 09.10.2006
Сообщения: 902

460 Монеты

СообщениеДобавлено: Вт, 12 Янв, 2010 00:31    Заголовок сообщения: Помогите с банальным SQL запросом, выборка новостей Ответить с цитатой

Задача: выбрать новости со статусом 1, подсчитать количество коментариев к этой новости

По инерции делаю так:

Код:

SELECT
    news_cpu,
    news_title,
    news_intro,
    COUNT(comment_id) AS news_comments

FROM news

LEFT JOIN comments
 
ON
    comment_parent = news_id

WHERE
    news_status = '1'
AND
    comment_type = '0'

GROUP BY
    news_id


Выбирает почему-то только 1 новость... У других новостей тоже есть коменты, статус 1...

comment_type = '0' это соотношения типа коментария, что он новостной, а не например фотографии.
_________________
NextStage - live music competition
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 353

13058 Монеты

СообщениеДобавлено: Вт, 12 Янв, 2010 02:35    Заголовок сообщения: Ответить с цитатой

Код:
....
FROM comments
JOIN news
.......
GROUP BY comment_parent


Не уверен, что правильно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
madhamster
Согнул ложку
Согнул ложку


Зарегистрирован: 09.10.2006
Сообщения: 902

460 Монеты

СообщениеДобавлено: Вт, 12 Янв, 2010 14:03    Заголовок сообщения: Ответить с цитатой

Нет тут уже касяк, он не выбирет новости без коментов.
Но я всё равно попробовал результат не изменился.

Вот если я убираю одно из условий WHERE то выбирает вроде как нужно, но я не могу без них.
_________________
NextStage - live music competition
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Артур
11 1110 1000
11 1110 1000


Зарегистрирован: 22.01.2008
Сообщения: 1163
Откуда: Lietuva
7489 Монеты

СообщениеДобавлено: Вт, 12 Янв, 2010 14:03    Заголовок сообщения: Ответить с цитатой

Код:
SELECT
   news.news_id as news_id,
   news.news_cpu as news_cpu ,
   news.news_title as news_title,
   news.news_intro as news_intro,
   COUNT(comments.id) as news_comments
FROM
   news
LEFT JOIN
   comments
   ON
      (comments.comment_parent = news.news_id AND comments. comment_type = '0')
WHERE
   news.news_status = '1'
GROUP BY
   news.news_id


Должно работать

Если вы используйте MySQL то можно и без
Код:
   as news_id,
   as news_cpu ,
   as news_title,
   as news_intro,

_________________
Скрипты [PHP/JS] на заказ, в ЛС, недорого.

SAPE
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
madhamster
Согнул ложку
Согнул ложку


Зарегистрирован: 09.10.2006
Сообщения: 902

460 Монеты

СообщениеДобавлено: Вт, 12 Янв, 2010 14:18    Заголовок сообщения: Ответить с цитатой

Добавление названий таблиц ничего не дало, в таблицах нет одинаковых полей.

Ваш запрос работает, но нет проверки на тип коментария, то есть он подсчитывает все коменты у которых comment_parent = news_id, может так случится что comment_parent у комментария с типом 1(фотографии) совпадёт с news_id в результате чего неправильный подсчёт.

Идея как бы простая, под разделы сайта разные таблицы, фото видео, новости, а комментарии хранятся в одной таблице, в которой есть тип коментария(новостной, фото, видео) и родитель коментария. который указывает на ID конкретной новости, или фотки в зависимости от типа.

Где-то закралась бага...

Кстати может есть какие тулзы для отладки SQL запросов?
_________________
NextStage - live music competition
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Артур
11 1110 1000
11 1110 1000


Зарегистрирован: 22.01.2008
Сообщения: 1163
Откуда: Lietuva
7489 Монеты

СообщениеДобавлено: Вт, 12 Янв, 2010 14:23    Заголовок сообщения: Ответить с цитатой

Код:
SELECT
   news.news_id as news_id,
   news.news_cpu as news_cpu ,
   news.news_title as news_title,
   news.news_intro as news_intro,
   COUNT(comments.comment_parent) as news_comments
FROM
   news
LEFT JOIN
   comments
   ON
      (comments.comment_parent = news.news_id

AND comments.comment_type = '0'

)
WHERE
   news.news_status = '1'
GROUP BY
   news.news_id


Я свой пост подправил но вы видимо не заметили Wink
_________________
Скрипты [PHP/JS] на заказ, в ЛС, недорого.

SAPE
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
madhamster
Согнул ложку
Согнул ложку


Зарегистрирован: 09.10.2006
Сообщения: 902

460 Монеты

СообщениеДобавлено: Вт, 12 Янв, 2010 14:32    Заголовок сообщения: Ответить с цитатой

ААААА РАБОТАЕТ!!! Спасибо)
Я просто не знал, что с ONом можно обращатся таким образом, я думал он только для указания связи полей таблиц.

P.S. Ушёл учить оператор ON
_________________
NextStage - live music competition
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
Страница 1 из 1

 


Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group