- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Так выше же хороший пример с группировкой :))
Перефразируя -
SELECT t.id, COUNT(*) FROM topics t INNER JOIN comments c ON c.topic_id = t.id GROUP BY t.id
выведет ID статей и сколько для них комментариев
То есть более-менее рабочее:
Не читал весь тред, но скажу, что есть вариант добавить в новостную таблицу поле reply_count и при добавлении нового комментария вносить изменение в это поле. ИМХО самый правильны вариант.
чё за reply_count? Это спец-поле? И как его увязать? Если просто вносить номер, при записи коммента, то это легко, но есть НО: миисам транзакции не понимает, можно вписать в 1 таблицу, но не вписать в другую. Возникает несоответствие... не хотелось бы.
jumash,
Использовал в таком виде:
$sql ='SELECT COUNT(*),b.id,b.name,b.`create`,b.`date_create`,b.pre ';
$sql.='FROM '.table_blogs.' b ';
$sql.='LEFT JOIN '.table_comments.' c ';
$sql.='ON c.id_blog = b.id ';
$sql.='GROUP BY b.id ';
$sql.='ORDER BY b.`date_create` DESC ';
$sql.='LIMIT '.$from.','.maxlines;
С INNER JOIN чё-то не то пулучалось (вообще, я пока не вьехал, чем INNER JOIN отличается от LEFT JOIN)
но если комментов нет, пишет 1 (так как 1 строка получается за счет таблици статей)
Но мне подсказали такой вариант:
$sql ='SELECT b.id,b.name,b.`create`,b.`date_create`,b.pre, COALESCE(cnt, 0) as cmtcnt ';
$sql.='FROM '.table_blogs.' b ';
$sql.='LEFT JOIN (SELECT id_blog,COUNT(*) as cnt FROM '.table_comments.' WHERE `checked` GROUP BY id_blog) as c ';
$sql.='ON c.id_blog = b.id ';
$sql.='GROUP BY b.id ';
$sql.='ORDER BY b.`date_create` DESC ';
$sql.='LIMIT '.$from.','.maxlines;
В нем, если коментов нет, показывает ноль (как и положено)
Так что, кому нужно выполнять аналогичные задачи - юзайте
чё за reply_count? Это спец-поле?
Как уже говорили выше оптимальным вариантом будет добавить к таблице статей дополнительное поле в котором хранить количество коментариев (и обновлять его по мере добавления/удаления коментариев).
Чтобы другого вы не придумывали - всеравно рано или поздно прийдете к этому решению, поэтому мой вам совет не теряйте время на поиск решений которых нету. Добавляйте доп. поле и реализуйте его изменение/синхронизацию.
Я уже нашел решение и постом выше привел 2 варианта
Supervisork,
ну ну.. думаете изобрели велосипед? :)
Если вопрос быстродействия и масштабированности (работоспособность при значительном увеличении записей в таблицах) вас не волнует - то что вы предложили можно назвать "вариантом".
Не хотите слушать советов, хотите набить собственные шышки, а затем судорожно переделывать код когда сервер начнет загибаться под нагрузкой ? .. запрещать не буду - это ваше право.
Не думаю, что там количество записей в ближайшие годы перевалит за сотню. Вот, если бы это был общественный многопользовательский блог, я бы, конечно, просто наращивал счетчик по мере роста комментариев. То есть, думаю, для этой задачи можно подгрузить скуэль потсчитывать каждый раз.