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

Posted

技术标签:

【中文标题】需要一个可以过滤结果的 MySQL 查询【英文标题】:Need a MySQL query that can filter the results 【发布时间】: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
      
  
?>

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

【问题讨论】:

【参考方案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) 但查询似乎仍然很复杂。我将搜索那些变量声明。再次感谢先生。

以上是关于需要一个可以过滤结果的 MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用另一个查询结果过滤MySQL表

如何使用 group_concat 和左连接计算 mysql 查询的结果

MySQL 之子查询

MYSQL 学习笔记记录整理之三:子查询

使用 php 和 mysql 搜索查询 [关闭]

MySQL-复杂查询及条件-起别名-多表查询-04