|
|
|
| Есть две связанные таблицы category и news,
нужно вывести все категории и по две новости из каждой категории.
Как организовать лимитированный запрос?
Такой запрос вывидет все новости к каждой и категорий
SELECT * FROM news f1 JOIN category f2 ON f1.id_category= f2.id
А мне нужно чтобы выводил не все новости, а только две к каждой категории.
те. не так:
Кат 1
Новость 1
Новость 2
Новость 3
Новость 4
Кат 2
Новость 1
Новость 2
Новость 3
Нужно так:
Кат 1
Новость 1
Новость 2
Кат 2
Новость 1
Новость 2 | |
|
|
|
|
|
|
|
для: Rozha
(19.06.2013 в 06:37)
| | Можно начать отталкиваться от следующего варианта (не шибко скоростной)
(SELECT
*
FROM
news f1
JOIN
category f2
ON
f1.id_category= f2.id
WHERE
f2.id = 1
ORDER BY putdate DESC
LIMIT 2)
UNION
(SELECT
*
FROM
news f1
JOIN
category f2
ON
f1.id_category= f2.id
WHERE
f2.id = 2
ORDER BY putdate DESC
LIMIT 2)
|
| |
|
|
|
|
|
|
|
для: cheops
(19.06.2013 в 07:31)
| | что-то я не пойму.... А если 186 категорий? Или и того больше?
> не шибко скоростной
А в MySQL и нет средств для удобного вывода TOP n
Сейчас попробую изобразить.... | |
|
|
|
|
|
|
|
для: cheops
(19.06.2013 в 07:31)
| | Т.к. даты могут и дублироваться, лучше опираться на ID новости, иначе в результате может быть более 2 новостей по категории.
У меня были подходящие таблицы books вместо news и authors вместо category. Названия таблиц и столбцов сами поменяйте.
SELECT *
FROM authors a
LEFT JOIN books b USING(author_id)
WHERE 3>(
SELECT count(*)
FROM books
WHERE author_id=a.author_id
AND book_id>=b.book_id
)
ORDER BY author_id, `date` DESC
|
| |
|
|
|