2013-10-06 2 views
0

Быстрый обзор, я пытаюсь получить последние 5 сообщений на форуме из моей таблицы (-ов) форума, чтобы отобразить пользователю в столбце RHS.Попытка получить список уникальных сообщений форума, не работает

Что я также хочу, так это то, что этот список должен показывать только уникальные заголовки форумов (иногда пользователи публикуют один и тот же пост на нескольких форумах, я не хочу, чтобы в моем ящике RHS потенциально отображались те же 5 «названий», даже хотя они находятся в разных категориях форума).

Но этот sql не работает по-тихому ... он полностью пропускает любые сообщения на форуме, которые имеют один и тот же заголовок несколько раз, я все же хочу иметь много записей заглавия, но только один.

SELECT 
    f.id, 
    f.title, 
    fm.url_path 
FROM forum_posts AS f 
INNER JOIN forum_master AS fm 
    ON f.forum_id = fm.id 
WHERE deleted = 0 
    AND blacklisted = 0 
GROUP BY f.title 
ORDER BY f.id DESC 
LIMIT 5 

Для примера рассмотрим эту таблицу

id title 
1 a 
2 b 
3 c 
4 d 
5 e 
6 f 
7 f 

Я хочу вернуться идентификаторами 7,5,4,3,2. Мне все еще нужен экземпляр названия f, но только один. Мой код, кажется, возвращает 1-5 (полностью пропуская оба id 6-7, потому что они имеют одинаковый заголовок).

Любые мысли ????

+0

Я просто попробовал это в скрипте SQL, и кажется, что он ведет себя так, как вы его описываете. Что-нибудь еще, что вы могли бы добавить, чтобы помочь ему сломаться? Или я что-то недопонимаю? http://sqlfiddle.com/#!2/ce692/1 – Lathejockey81

+0

Спасибо Lathejockey81 ... да, ваша скрипка, похоже, работает правильно. Хм, у меня должны быть гремлины в моем коде, чтобы расследовать и ответить. Спасибо за это! –

+0

Это действительно странно ... после выполнения тестирования и var_dumps возвращаемого результата db определенно пропускает строки с тем же заголовком. Не уверен, что это имеет значение, но я нахожусь в XAMPP (перезапущен сервер, все та же проблема), запуская MySQL версии 5.6.12. Если я выберу GROUP BY, я получаю результат с 3 одинаковыми названиями, верните его и я не получу ни одного из них. 3. Арххх. –

ответ

0

Попробуйте вложенный запрос у меня есть здесь: http://sqlfiddle.com/#!2/758b3e/11

SELECT 
    f.title, 
    f.id, 
    fm.url_path 
FROM forum_posts AS f 
INNER JOIN forum_master AS fm 
ON f.forum_id = fm.id 
WHERE deleted = 0 
AND blacklisted = 0 
AND (SELECT id 
    FROM forum_posts 
    WHERE title = f.title 
    ORDER BY id DESC 
    LIMIT 1) = f.id 
ORDER BY f.id DESC 
LIMIT 5 

Вместо того, чтобы использовать группу по (который я считаю, потерпит неудачу в Oracle в этих условиях - не может группа с несколькими идентификаторами) Я отфильтрованный идентификатор единственная возможность в предложении WHERE, которая удаляет дубликаты и имеет самый высокий идентификатор. Группа по запросу захватывала самый низкий идентификатор, поэтому, даже если он работал, это не будет именно то, что вы ищете в качестве решения.

+0

Это БОЛЬШОЕ. Практически идеальная работа ... если первая запись «множественного заголовка» была удалена или занесена в черный список, результаты «множественного названия» не были возвращены. Просто добавлены удаленные/черные списки, где предложения также в подвыборке, и все это отлично! Огромное спасибо!!! –

Смежные вопросы