2013-12-23 100 views
1

我有一個問題,我的PHP頁面循環。SQL上的循環選擇

我選擇了我的DB只有2信息是這樣的:

$sqlins="SELECT hardware.name, rd.cmd 
FROM hardware, rd 
WHERE hardware.name LIKE 'Boomee' 
AND rd.cmd LIKE 'putty'"; 
$toto = mysql_query($sqlins); 

這是我要求的個例。 當我使用循環雖然是這樣的:

while ($data=mysql_fetch_array($toto)) { 
    echo $data[1]; 
    echo "<br>"; 
} 

我不明白爲什麼我的輸出送了我很多時間在同一行。 在我的數據庫中,我有30個條目。我想把它們全部展示出來......但代碼給我發了2700!

我真正的腳本是比這更復雜一點,我在SQL Query使用preg_replaceimplode等等,等等「AND LIKE」。

我希望你能幫助我。請幫助我。

+1

您的SQL查詢可能會返回2個表的交叉連接(笛卡爾乘積)。你需要加入他們的互動領域。 –

+0

謝謝你和@Joe Taras得到了我編輯我的查詢的最佳答案,現在它工作。 – user3114471

回答

3

這個查詢:

SELECT hardware.name, rd.cmd 
FROM hardware, rd 
WHERE hardware.name LIKE 'Boomee' 
AND rd.cmd LIKE 'putty' 

執行笛卡爾乘積。

如果你不想執行這個動作,你必須把你的2個表硬件和rd關聯起來。

我不知道硬件是rd還是viceversa的父親。但是如果存在一個字段來鏈接兩個表,則可以在WHERE子句中添加此條件。

或者(諫)你重寫查詢有明確的JOIN這樣:

SELECT hardware.name, rd.cmd 
FROM hardware 
INNER JOIN rd 
ON hardware.field = rd.field 
WHERE hardware.name LIKE 'Boomee' 
AND rd.cmd LIKE 'putty' 
+0

感謝這是完美的工作。 – user3114471

1

有,我有2場在硬件和RD相連。

第一個是「hardware.id」,第二個是「rd.hardware_id」。

而你的方法完美地工作。

我改變了我這樣的查詢,因爲我必須在使用它之前瞭解什麼是INNER JOIN和ON。

SELECT hardware.name, rd.cmd 
FROM hardware, rd 
WHERE hardware.id=rd.hardware_id 
AND hardware.name LIKE 'Boomee' 
AND rd.cmd LIKE 'putty' 

非常感謝你。以同樣的方式,它會幫助我追求表格之間的聯繫。