如何解决将多个单独的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 举报,一经查实,本站将立刻删除。