MySQL: захватить по одной строке из каждой категории, но удалить повторяющиеся строки, размещенные в нескольких категориях - PullRequest
1 голос
/ 21 сентября 2009

У меня есть база статей, которые хранятся в категориях. Для моей домашней страницы я хочу получить статью из каждой категории (мне все равно, какая). Однако некоторые статьи разбиты на несколько категорий, поэтому они появляются дважды.

У меня есть таблица с именем tblReview с полями статьи (reviewID, заголовок, reviewText) и таблица с именем tblWebsiteContent, которая сообщает сайту, в каких категориях находятся статьи (id, reviewID, categoryID) и, наконец, таблица с именем tblCategories ( categoryID, categoryName), в котором хранятся категории.

Мой запрос в основном объединяет эти таблицы и использует GROUP BY tblCategory.categoryID. Если я попытаюсь добавить tblReview.reviewID в оператор GROUP BY, я получу сотни статей, а не 22 (количество категорий, которые у меня есть).

У меня такое ощущение, что для этого нужен подзапрос, но мои усилия по тестированию не сработали (не уверен, какой запрос должен содержать мои объединения / список полей / предложение where и т. Д.).

Спасибо!

Мэтт

Ответы [ 3 ]

0 голосов
/ 21 сентября 2009

выберите DISTINCT reviewID

0 голосов
/ 21 сентября 2009
SELECT T.categoryName, tR.headline, tR.reviewText
FROM (
    SELECT tC.categoryName, MAX(tR1.reviewID) reviewID
    FROM tblReview tR1 join tblWebsiteContent tWC on tR1.reviewID = tWC.reviewID
                      join tblCategory tC on tC.categoryID = tWC.categoryID
    GROUP BY tC.categoryName) T JOIN
    tblReview.tR on tR.reviewID = T.reviewID

этот запрос выберет для каждой категории заголовок статьи, соответствующий максимальному идентификатору reviewId для этой категории (вы сказали, что мне все равно)

0 голосов
/ 21 сентября 2009

Попробуйте использовать SELECT DISTINCT. (Это будет работать только в том случае, если ваш SELECT использует только идентификатор статьи.)

...