簡體   English   中英

mysqli-多少太多(非常慢)

[英]mysqli - how many is too many (very slow)

我有一個調查頁面,該頁面基於您對先前問題的回答,使用jquery顯示和隱藏其他問題(這些問題隨輸入類型的不同而不同)。我具有保存功能,然后具有保存並提交功能-保存並提交時,需要驗證所有未隱藏的問題均已得到回答-在使用輸出進行原型設計以測試語法時,我意識到我正在運行的大量mysqli查詢會減慢頁面速度(可能超過300個問題,或縮短至10)

下面是一個查詢,以查找為該調查分配了多少個問題(sid,$ surveyid),$ qcountup是我使用while語句訪問介於1和最高問題編號($ qtotal)之間的每個數字的方式我們進入while語句,它在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。 您的原始代碼用於不同的查詢中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM