Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как ограничить кол-во выводимых записей из связаных таблиц
 
 автор: Rozha   (19.06.2013 в 06:37)   письмо автору
 
 

Есть две связанные таблицы 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

  Ответить  
 
 автор: cheops   (19.06.2013 в 07:31)   письмо автору
 
   для: 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)

  Ответить  
 
 автор: Sfinks   (19.06.2013 в 09:49)   письмо автору
 
   для: cheops   (19.06.2013 в 07:31)
 

что-то я не пойму.... А если 186 категорий? Или и того больше?

> не шибко скоростной
А в MySQL и нет средств для удобного вывода TOP n

Сейчас попробую изобразить....

  Ответить  
 
 автор: Sfinks   (19.06.2013 в 09:56)   письмо автору
 
   для: 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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования