2012-10-18 27 views
0

我想顯示一個結果需要兩個以前的查詢;而當我試圖用新的Mysqli界面來做這些事情時,我不會以正確的方式工作。使用幾個MYSQLI準備並獲取

我都這樣了,輸出是:警告:mysqli的準備::()[mysqli.prepare]:新的語句之前準備的所有數據都必須取出發生

$qryRdmPh="SELECT `id` FROM `table` ORDER BY RAND() LIMIT 0,30"; 
$stmtRdmPh = $mysqli->prepare($qryRdmPh); 
$stmtRdmPh->execute(); 
$stmtRdmPh->bind_result($id); 
while($stmtRdmPh->fetch()) { 
//Obtener el atributo Frase 
$qryPhVal="SELECT `id_v` FROM `values` WHERE `id_p`='" . $id . "'"; 
$stmtPhVal = $mysqli->prepare($qryPhVal); 
$stmtPhVal->execute(); 
$stmtPhVal->bind_result($idV); 
    while($stmtPhVal->fetch()){ 
    echo $idV; 
    } 
} 

必須有是另一種顯示沒有如此複雜規則的結果的方式......我讀過使用Statement查詢非常重要,但爲什麼?它使我的代碼更長更復雜。

編輯:我真的很感謝,如果有人介紹我,如果報表是爲說如此重要,如果我要經常使用它們。

+1

無論何時您正在執行嵌套查詢,其中內部查詢根據外部查詢的結果獲取內容時,應嚴格考慮使用[SQL連接](http://en.wikipedia.org/wiki/Join_ %28SQL%29) –

+0

@MarcB在這種情況下,我需要由第一個查詢返回的每個SINGLE ID的結果集合。我不認爲我可以在那裏做任何參加。 – Kenedy

+1

是嗎?任何兩個嵌套查詢都可以做,聯合查詢可以做得更好。 '從表中選擇id左連接值values.id_p = table.id order by rand()limit 0,30'。 –

回答

0

始終可以做同樣的事情,沒有這樣嵌套查詢。而且,如果你這樣做,它可能會損害你的數據庫。總是試圖得到一個更簡單的方法。

例如:如果您要執行依賴於當前查詢的查詢,那麼在緩衝後製作緩衝區並插入所有行會更好。