2012-10-20 69 views
0

我有一個網頁,根據您的回答前面的問題顯示了一個調查 - 和使用jquery(這些問題與所有的輸入類型不同)我有一個保存隱藏其他問題函數,然後保存並提交功能 - 保存和提交我需要驗證沒有被隱藏已回答所有的問題的時候 - 與輸出的測試,我意識到,我正在運行的mysqli querys的大規模量減緩語法原型本頁面向下(可以是300個問題或10個簡短的問題)的mysqli - 多少是太多了(很慢)

我們下面的查詢是查詢有多少問題分配給這個調查(sid,$ surveyid),$ qcountup是我的方式使用while語句訪問1和最高問題號($ q)之間的每一個數字總) 我們踏踏實實地是從1翻修術,每數while語句 - 的同時裏面我們運行一個查詢以瞭解是否有答案存在於數據庫中的每個號碼(如果它沒有回答$ QTOTAL) - 它不存在。 再怎麼這是目前編碼可能意味着300+ mysqli的querys(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;  
} 

回答

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那裏。您的原始代碼都用於不同的查詢。

+0

遺憾沒能澄清 - 我需要的問題太多,以確定條款是否得到滿足來隱藏的問題 - 但我的另一個問題是,我可以匹配的問題數(以QID識別問題表)的答覆號,也有沒有辦法在發言後選擇由其編號的答案,就好像它是一個數組 - (如果我需要從#23或某事的答案提交的答案[23]) –

+1

'$ dbc'僅僅是數據庫聯接被'mysqli_connect()'返回,它不包含任何信息。我會很快用一個新的查詢來更新我的答案,這個查詢將答案與問題進行匹配。 – Barmar

+0

是的,我看到了$ DBC參考剛過,我打添加註釋 - 我欣賞的幫助 - 這真是一個話題,我失去了 –