gpt4 book ai didi

php - mysqli - 有多少就太多了(非常慢)

转载 作者:行者123 更新时间:2023-11-29 14:14:05 24 4
gpt4 key购买 nike

我有一个调查页面 - 根据您对之前问题的回答,使用 jquery 显示和隐藏其他问题(这些问题因所有输入类型而异) 我有一个保存功能,然后有一个保存和提交功能 - 保存时并提交我需要验证所有尚未隐藏的问题都已得到解答 - 在使用输出进行原型(prototype)设计以测试语法时,我意识到我正在运行的大量 mysqli 查询会减慢页面速度(可能超过 300 个问题或最短为 10)

下面是一个查询,用于查明有多少问题分配给此调查(sid、$surveyid),$qcountup 是我使 while 语句访问 1 到最高问题编号之间的每个数字的方法(总计 $q)我们深入了解 while 语句,该语句在运行查询以查明数据库中每个数字是否存在答案的同时,对 1 - $qtotal 之间的每个数字进行重新操作(如果没有答案 - 它将不存在)。同样,当前的编码方式可能意味着 300 多个 mysqli 查询(LAG)。关于如何压缩或写得更好有什么建议吗?

    $qquery = "SELECT * FROM question WHERE (sid = ".$surveyid.");";
$qresult = mysqli_query($dbc, $qquery);
$qtotal = mysqli_num_rows($qresult);
$qcountup = 1;
while($qcountup <= $qtotal){
$squery = "SELECT * FROM answers WHERE sid='".$SID."' AND question='".$qcountup."';";
$sresult = mysqli_query($dbc, $squery) or die(mysql_error());
if (mysqli_num_rows($sresult) )
{
echo("<br>row existed");
} else {
echo("<br>row doesn't exist");
}
$qcountup = $qcountup + 1;
}

最佳答案

首先,由于您使用的是 mysqli,因此您应该使用准备好的查询,而不是将变量直接插入查询字符串中。

第一个查询应该是:

SELECT COUNT(*) qtotal FROM question WHERE sid = "$surveyid"

如果您只对数字感兴趣,则无需获取所有列。将 $qtotal 设置为此结果的 qtotal 列。

对于第二部分,您可以使用 LEFT JOIN 将问题与答案进行匹配,并查看缺少哪些答案:

SELECT * FROM questions q LEFT JOIN answers a USING (question, sid)
WHERE q.sid = $SID
ORDER BY q.question

如果缺少答案,则该行中的 a.question 将为 NULL。

我不确定是否应该在那里使用 $SID 或 $surveyid;您的原始代码在不同的查询中使用了两者。

关于php - mysqli - 有多少就太多了(非常慢),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12985817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com