【问题标题】:Need a MySQL query that can filter the results需要一个可以过滤结果的 MySQL 查询
【发布时间】:2014-01-12 10:57:57
【问题描述】:

这里,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`

我通过查询单独的查询进行了尝试。即首先检查章节数并通过数组循环。

<?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
      }
  }
?>

有没有什么办法,我可以通过一个查询来完成整个事情!谢谢!请有任何想法!

【问题讨论】:

    标签: mysql sql select subquery row-number


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

    • 感谢先生的回复。但是你这样做的方式似乎很复杂,我想知道为什么要引入“queNo”?
    • @ManishShrestha 不客气。引入 queNo 是因为我想按章节为每个问题提供 id。在sql server中可以使用ROW_NUMBER()函数很简单,但是在MySQL中没有这样的函数,所以我们需要实现一些逻辑来实现。
    • 内部查询给出的结果如下:tinypic.com/r/2ngy9so/5我不认为这是我想要的。
    • 哦哦哦...我明白了,因为其他章节只有1、1个数据。谢谢你,先生,你让我开心! (y) 但查询似乎仍然很复杂。我将搜索那些变量声明。再次感谢先生。
    猜你喜欢
    • 2015-09-17
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多