Выбор с ограничением, но также с ограничением количества раз, когда столбец может иметь конкретное значение - PullRequest
2 голосов
/ 02 октября 2011

У меня следующий запрос SQL. Я хочу получить 5 сообщений по этому запросу, но я также хочу ограничить его, чтобы я мог получить не более двух сообщений на пользователя. В этом случае только два пользователя означают не более четырех сообщений.

SELECT DISTINCT * 
FROM   posts 
WHERE  (user_id IN (2,1000001) 
       AND NOT track_id = 34) 
GROUP BY 
       track_id 
ORDER BY 
       id desc LIMIT 5

Ответы [ 2 ]

2 голосов
/ 02 октября 2011

Добавьте условие к предложению WHERE, в котором вы подсчитаете количество строк для этого пользователя с большим идентификатором и убедитесь, что в нем только 1 или 0 строк.

 SELECT DISTINCT * 
 FROM   posts P1
 WHERE  user_id IN (2,1000001) AND NOT track_id = 34 AND
        (SELECT COUNT(*) FROM posts P2 
            WHERE P2.user_id = P1.user_id AND P2.id > P1.id AND P2.track_id <> 34)
         <= 1
 GROUP BY 
        track_id 
 ORDER BY 
        id desc LIMIT 5
0 голосов
/ 02 октября 2011
SELECT sub.* FROM 
  (SELECT p1.* 
   FROM posts p1 
   LEFT JOIN posts p2 ON (p1.user_id = p2.user_id AND p1.id < p2.id)
   LEFT JOIN posts p3 ON (p1.user_id = p3.user_id AND p2.id < p3.id)
   WHERE user_id IN ('2','1000001') 
   AND NOT track_id = '34'
   AND p3.id IS NULL
   ORDER BY user_id) sub
GROUP BY sub.track_id
ORDER BY sub.id DESC
LIMIT 5

Подвыбор позволяет только сообщения с верхними 2 users.id, которые выбирают только 2 строки.
Однако это действительно вызывает результат определенным образом, так что вы можете захотетьчтобы проверить, подходит ли это вашему варианту использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...