Перейти к публикации

Последние комментарии. MySQL запрос


Рекомендованные сообщения

Сайт 21region.org

Есть запрос:

$sql = $db->query("SELECT comments.post_id, comments.is_register, comments.text, comments.autor, comments.email, post.id, post.date as newsdate, post.title, post.alt_name FROM " . PREFIX . "_comments as comments, " . PREFIX . "_post as post WHERE post.id=comments.post_id ORDER BY comments.date DESC LIMIT 0,".LIMITCOMM);

Который выбирает последние комментарии в новостях. В выборке есть одинаковые новости, с разными комментаторами.

Как убрать дублирующие новости, что выбрались только уникальные последние новости, в которых появились комментарии.

Спасибо.

Ссылка на сообщение
Поделиться на других сайтах

В выборке есть одинаковые новости, с разными комментаторами.

Как убрать дублирующие новости, что выбрались только уникальные последние новости, в которых появились комментарии.

Отсюдова по-подробнее

Ссылка на сообщение
Поделиться на других сайтах

В выборке есть одинаковые новости, с разными комментаторами.

Как убрать дублирующие новости, что выбрались только уникальные последние новости, в которых появились комментарии.

Отсюдова по-подробнее

Вот выборка этого запроса:

Автобусы СССР → RedG21

Bard (ОГНИ) «КнИгА НеНорМальНого» (Двойной микстейп) → Karatel

Тутанхамон погиб в... авиакатастрофе? → ZiCell

Bard (ОГНИ) «КнИгА НеНорМальНого» (Двойной микстейп) → GOLD

Американская семья полгода не приходила за выигрышем в ... → MaximV

Метеостанция (21 фото) → MaximV

Российский биатлонист выиграл золото Олимпиады-2010 → euGeniy

MaximV-Beauty Sounds [Episode 007] 19.02.2010 → MaximV

Slow-motion от канала Discovery → ZiCell

MaximV-Beauty Sounds [Episode 007] 19.02.2010 → xatab

Российский биатлонист выиграл золото Олимпиады-2010 → pups

Метеостанция (21 фото) → fire

Бокс-офис России за уик-энд 11.02-14.02.10 → andreika_shuler

Григорий Ефимович Распутин (Новых) → aLexAndr

Метеостанция (21 фото) → ZiCell

В Махачкале грузовик врезался в рынок: 4 погибших → mpx

Ускорение на льду 2010, Чебоксарский залив → ZiCell

Российский биатлонист выиграл золото Олимпиады-2010 → BASON

Так в Петербурге убирают снег → [DnB]JIocb

Российский биатлонист выиграл золото Олимпиады-2010 → Vasilekk

Тут есть повторы:

По 2 раза:

Bard (ОГНИ) «КнИгА НеНорМальНого» (Двойной микстейп)

MaximV-Beauty Sounds [Episode 007] 19.02.2010

3 раза:

Метеостанция (21 фото)

и 4 раза:

Российский биатлонист выиграл золото Олимпиады-2010

Нужно что было 20 последних новостей, в которых были комментарии.

Сейчас имеется 20 последних комментариев, с указанием где был комментарий...

Ссылка на сообщение
Поделиться на других сайтах

Уже не помню как эта штука работала, но попробуйте так:

$sql = $db->query("SELECT DISTINCT comments.post_id, comments.is_register, comments.text, comments.autor, comments.email, post.id, post.date as newsdate, post.title, post.alt_name FROM " . PREFIX . "_comments as comments, " . PREFIX . "_post as post WHERE post.id=comments.post_id ORDER BY comments.date DESC LIMIT 0,".LIMITCOMM);

Изменено пользователем kangalexey
Ссылка на сообщение
Поделиться на других сайтах

Уже не помню как эта штука работала, но попробуйте так:

$sql = $db->query("SELECT DISTINCT comments.post_id, comments.is_register, comments.text, comments.autor, comments.email, post.id, post.date as newsdate, post.title, post.alt_name FROM " . PREFIX . "_comments as comments, " . PREFIX . "_post as post WHERE post.id=comments.post_id ORDER BY comments.date DESC LIMIT 0,".LIMITCOMM);

Так уже пробовал ранее. Повесил сайт...

Ссылка на сообщение
Поделиться на других сайтах

GROUP by `comments`.`post_id` в конец поставьте перед лимитом и всё.

Можно строку запроса?

Ссылка на сообщение
Поделиться на других сайтах

$sql = $db->query("SELECT comments.post_id, comments.is_register, comments.text, comments.autor, comments.email, post.id, post.date as newsdate, post.title, post.alt_name FROM " . PREFIX . "_comments as comments, " . PREFIX . "_post as post WHERE post.id=comments.post_id GROUP by `comments`.`post_id` ORDER BY comments.date DESC LIMIT 0,".LIMITCOMM);

Попробуйте так.

Изменено пользователем IT-Security
Ссылка на сообщение
Поделиться на других сайтах

$sql = $db->query("SELECT comments.post_id, comments.is_register, comments.text, comments.autor, comments.email, post.id, post.date as newsdate, post.title, post.alt_name FROM " . PREFIX . "_comments as comments, " . PREFIX . "_post as post WHERE post.id=comments.post_id ORDER BY comments.date DESC GROUP by `comments`.`post_id` LIMIT 0,".LIMITCOMM);
Попробуйте так.
MySQL Error!

------------------------


The Error returned was:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP by `comments`.`post_id` LIMIT 0,20' at line 1


Error Number:

1064 

Ссылка на сообщение
Поделиться на других сайтах

$sql = $db->query("SELECT comments.post_id, comments.is_register, comments.text, comments.autor, comments.email, post.id, post.date as newsdate, post.title, post.alt_name FROM " . PREFIX . "_comments as comments, " . PREFIX . "_post as post WHERE post.id=comments.post_id GROUP by `comments`.`post_id` ORDER BY comments.date DESC LIMIT 0,".LIMITCOMM);

Попробуйте так.

Ссылка на сообщение
Поделиться на других сайтах

$sql = $db->query("SELECT comments.post_id, comments.is_register, comments.text, comments.autor, comments.email, post.id, post.date as newsdate, post.title, post.alt_name FROM " . PREFIX . "_comments as comments, " . PREFIX . "_post as post WHERE post.id=comments.post_id GROUP by `comments`.`post_id` ORDER BY comments.date DESC LIMIT 0,".LIMITCOMM);

Попробуйте так.

Порядок с блоке стал не правильным.

Вверху появились старые ссылки, чуть ниже свежее. Логика выборки не понятна.

Запрос выполняется очень долго.

Изменено пользователем Medik
Ссылка на сообщение
Поделиться на других сайтах

GROUP by

недостаточно. Там ещё MAX надо использовать, возможно сортировку. При большом количестве комментариев сайт точно так же повиснет. По уму - надо делать в таблице новости дополнительную колонку с номером последнего комментария. Это дольше, но верно 100%.

Ссылка на сообщение
Поделиться на других сайтах

А сколько у Вас извиняюсь вообще записей?

Сейчас 44700

GROUP by

недостаточно. Там ещё MAX надо использовать, возможно сортировку. При большом количестве комментариев сайт точно так же повиснет. По уму - надо делать в таблице новости дополнительную колонку с номером последнего комментария. Это дольше, но верно 100%.

Я к сожалению не умею писать запросы, и в PHP не силен. Но логика думаю нужна такая: выбрать 20 посл. комментариев. Отсортировать по новостям, удалить старые дубликаты, если осталось менее 10 строк, то выбрать ещё 10, отсортировать, удалить дубликаты, слить с 1 запросом, отсортировать, если 10 строк уже есть, то результат достигнут в 2 запроса. Потом можно положить в кеш на 1 минуту, что бы не мучать базу.

Ссылка на сообщение
Поделиться на других сайтах

что бы не мучать базу

по-моему, жёче способа, чем вышеизложеный - придумать нельзя)))

То, что вы предлагаете можно делать запросом с помощью distinct. Как вы уже пробовали - база ложиться. (на уровне мускула это делается конечно же не по вашему алгоритму, но суть та же, т.к. там выборка ограничена по размеру)

Кэш в одну минуту - тоже не серьёзно. Нужно, чтобы он обновлялся только когда добавлен комментарий.

Чтобы её не мучать - её нужно модифицировать так, как я написал. Хотя делать конечно же вам.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...