需要一个可以过滤结果的 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 查询的主要内容,如果未能解决你的问题,请参考以下文章