需要一个可以过滤结果的MySQL查询

The*_*ish 5 mysql sql select subquery row-number

这里,chapter_id可以是两个或两个以上.我需要以一种方式查询,每章都给出相等的输出.问题

即如果总问题是50,并且从5章开始,那么每章应该给出10个问题.

SELECT id, chapter_id, question, answer FROM `questions`
WHERE `chapter_id` IN (19, 20, 21, 22, 23)
ORDER BY `chapter_id`
Run Code Online (Sandbox Code Playgroud)

我通过查询单独的查询来尝试它.即首先检查章节的数量并通过数组循环.

<?php
  $total_qsn = 50;
  $chap[] = {19, 20, 21, 22, 23};
  $avg = $total_qsn/count($chap);
  for($i=0, $i<count($chap); i++){
      $sql = "SELECT id, chapter_id, question, answer FROM `questions` WHERE chapter_id = {$chap[i]} LIMIT 0, {$avg}";
      $result = mysql_query($sql);
      while($row = mysql_fetch_assoc($result)){
          // Print the array members
      }
  }
?>
Run Code Online (Sandbox Code Playgroud)

有没有办法,我只能通过一个查询完成整个事情!谢谢!请问任何想法!

Sah*_*hah 5

试试这个:

SELECT id, chapter_id, question, answer 
FROM (SELECT IF(@chapterId=@chapterId:=chapter_id, @id:=@id+1, @id:=0) queNo, id, chapter_id, question, answer 
      FROM `questions`, (SELECT @chapterId:=0, @id:=0) AS A 
      WHERE `chapter_id` IN (19, 20, 21, 22, 23)
      ORDER BY `chapter_id`
     ) AS A 
WHERE queNo < 10
Run Code Online (Sandbox Code Playgroud)