Ограничение на основе значения, выбранного из другой таблицы - PullRequest
2 голосов
/ 19 января 2011

У меня есть следующая структура таблиц:

Категория: идентификатор, имя, лимит

сообщений: идентификатор, категория, название, тело, дата, автор

Я пытаюсь показать последние сообщения из каждой категории, ограниченные полем "limit" в таблице категорий, упорядоченным по дате публикации.

Ответы [ 3 ]

0 голосов
/ 19 января 2011

Попробуйте что-то вроде этого: (не проверяет на ошибки)

$result = mysql_fetch_array(mysql_query("<query to select your category>"));
$limit = $result['limit'];
$queryResult = mysql_query("select * from posts order by date desc limit $limit");
//do whatever you want with the $queryResult
0 голосов
/ 19 января 2011

Интересный вариант для N-Greatest-Per-Group

SELECT id, name, limit, postid, title, body, date, author
FROM
(
    SELECT 
        c.id, c.name, c.limit, p.id postid, p.title, p.body, p.date, p.author
        @r:=case when @g=C.id then @r+1 else 1 end r,
        @g:=C.id
    FROM 
       (select @g:=null,@r:=0) n
       CROSS JOIN CATEGORY C
       INNER JOIN POSTS p on p.category = c.id
    ORDER BY 
        C.ID, postid
) X
WHERE r<=c.limit
ORDER BY ID, postid

Сторона, влияющая на переменные, по существу, производит 2 столбца

  • @ G = группа
  • @ R = номер строки в группе

Это может быть дорого, потому что нет ярлыка, он нумерует КАЖДУЮ строку в категории / сообщении JOIN, и только после этого он сокращается в WHERE r<=c.limit бите.

0 голосов
/ 19 января 2011

Если я вас понимаю:

SELECT * FROM posts LEFT JOIN Category ON posts.category = Category.id WHERE limit = 'some limit' ORDER BY category, date DESC

(Предполагается, что posts.category является ссылкой на таблицу первичного ключа категории)

...