微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将多个单独的SQL查询重写为一个

如何解决将多个单独的SQL查询重写为一个

我有一个数据库,在其中显示表的不同列中的行数,以作为站点统计信息。纯文本看起来像这样(英语翻译):

“目前,已注册 86 个问题。历史类别中有 16 个,地理类别中有 6 个。 “

我的PHP脚本非常简单:

$question_query = MysqLi_query($conn,'SELECT Q_id FROM questions');  
$question_result = MysqLi_num_rows($question_query);

$historie_query = MysqLi_query($conn,"SELECT Q_id FROM questions WHERE category LIKE '%Historie%'");  
$historie_result = MysqLi_num_rows($historie_query);

$geografi_query = MysqLi_query($conn,"SELECT Q_id FROM questions WHERE category LIKE '%Geografi%'");  
$geografi_result = MysqLi_num_rows($geografi_query);

echo '<h3>' . 'For øyeblikket er det ' . '<b>' . $question_result . '</b>' . ' spørsmål i databasen:' . '</h3>';
echo '<ul>' . '<li>' . '<b>' . $historie_result . '</b>' . ' historie-spørsmål.' . '</li>' ;
echo '<li>' . '<b>' . $geografi_result . '</b>' . ' geografi-spørsmål.' . '</li>' . '</ul>';

这很好用,但现在只执行3个查询。将来可能大约有10或15个查询

我尝试将它们合并为一个,但是仅输出一个查询

$query =  "SELECT Q_id FROM questions"; 
        "SELECT Q_id FROM questions WHERE category LIKE '%Historie%'"; 
        "SELECT Q_id FROM questions WHERE category LIKE '%Geografi%'";

$result = MysqLi_query ($conn,$query);
$count = MysqLi_num_rows($result);

print_r ($count);

我认为while循环可以解决这个问题,但是当我用while循环替换print_r时,对于不同的行计数($ question_count,$ historie_count,$ geografi_count),我得到了一个不确定的变量错误:>

while ($row = MysqLi_fetch_assoc($result)) {
    $row[0] = $question_count;
    $row[1] = $historie_count;
    $row[2] = $geografi_count;

    print_r ($question_count . '</br>' . $historie_count . '</br>' . $geografi_count);

}

我怎样才能使它成为一个查询?而且,这是否可取,还是将查询分隔开更好?

谢谢!

解决方法

使用条件聚合:

select 
    count(*) question_count,sum(category like '%Historie%') historie_count,sum(category like '%Geografi%') geografi_count
from questions 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。