How to choose a limited number of rows for each foreign key?

I have this table:

id
feed_id
...

Say I have 500 lines and I want to select 3 entries for each feed_id file? And 50 as a common limit.

How to write this SQL?

+4
source share
4 answers

Using:

SELECT x.feedid
  FROM (SELECT t.feedid,
               CASE WHEN @feed != t.feedid THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank,
               @feed := t.feedid
          FROM TABLE t
          JOIN (SELECT @rownum := NULL, @feed := 0) r
      ORDER BY t.feedid) x
 WHERE x.rank <= 3
 ORDER BY x.feedid
 LIMIT 50

What is unclear, the details of what you want to return are all rows in your table or just a file.

+3
source

Have you tried to use a subquery and a limit?

Sort of

SELECT  *
FROM    Table t
WHERE   ID IN (SELECT ID FROM @Table WHERE FEED_ID = t.FEED_ID LIMIT 3)
LIMIT 500
+2
source

transact SQL TOP, , ...

0
source

You can do this using a stored procedure.

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_feed`()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a INT;
DECLARE cur1 CURSOR FOR SELECT id FROM test.id LIMIT 50;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO a;
    IF NOT done THEN
        SELECT * FROM feed_id WHERE id=a LIMIT 3;               
    END IF;
UNTIL done END REPEAT;
CLOSE cur1;

END$$
DELIMITER;
0
source

All Articles