2010-03-21 224 views
0

我有一個包含成員名稱和一個字段與多個ID號碼的表。我想創建一個查詢,返回ID字段中的任何值與數組中的任何值重疊的結果。雖然循環陣列

例如:名字:史密斯 姓:約翰 ID: 101,103

我有陣列#1具有值101,102,103

我想要的查詢以輸出具有在其id域中列出的值101或102或103的所有成員,並具有列出的多個ID。

Array ( [0] => 101 
     [1] => 102 
     [2] => 103) 

$sql="SELECT firstname, lastname, id 
     FROM members WHERE id LIKE '%".$array_num_1."%'"; 
$result=mysql_query($sql); 

while ($rows=mysql_fetch_array($result)) { 
     echo $rows['lastname'].', '.$rows['firstname'].'-'.$rows['id']; 
     } 

我試圖簡化它。這些ID實際上存儲在另一個表中,並且我從該表中生成了該數組。

$array_num_1 = array(); 
$sql_id="SELECT id FROM id_table WHERE id < 200"; 
$result_id=mysql_query($sql_id); 
while($rows_id=mysql_fetch_array($result_id)){; 
     $array_num_1[] = $rows_id['id']; 
} 
+3

存儲值的列表,然後嘗試寫反對一個查詢,然後使用答案是造型的關係的* *可怕的方式。我的建議是將您的數據庫用作數據庫。爲關係創建一個子表,然後查詢很簡單。 – cletus 2010-03-21 16:01:54

+0

這些ID實際上存儲在一個單獨的表中。見上面的編輯。 – Michael 2010-03-21 16:16:14

+0

所以,你必須擺脫成員表中的這些id – 2010-03-21 16:21:07

回答

2

正常化您的數據庫。 將這些ID設置爲單獨的表格。

編輯:下面

+0

這些ID實際上存儲在一個單獨的表中。見上面的編輯。 – Michael 2010-03-21 16:14:20

1

如果你必須這樣做:作爲@cletus在他的評論中說

$sql = "SELECT firstname, lastname, id FROM members WHER id IN (" . implode(', ', $array) . ")" 

,不過,該數據庫是爲這種事做。在一個數組中硬編碼似乎是做事情的次優方式。

+0

我已經嘗試使用IN函數,與此問題是ID字段中列出了多個號碼。所以WHERE ID等於「101,103」不適用於IN(101,102,103) – Michael 2010-03-21 16:07:16

+0

然後修復您的數據庫結構。 – ceejayoz 2010-03-21 16:11:58

+0

這些ID實際上存儲在一個單獨的表中。見上面的編輯。 – Michael 2010-03-21 16:15:16

1

你可能尋找IN

SELECT firstname, lastname, id FROM members WHERE id IN (1, 2, 3); 

當然,你可以動態地創建(1, 2, 3),例如使用implode。


哎呀,我只是意識到我得到你的數據庫架構錯誤。正如其他人所建議的那樣,您應該使其正常化。

+0

這是什麼意思?我對此是半新的。 – Michael 2010-03-21 16:08:08

+0

@middus(OT)現在我最近在哪裏看到你的照片?;) – Gordon 2010-03-21 17:45:26

+0

@Gordon看看這裏的人在做什麼總是很有趣。 :) – middus 2010-03-21 18:23:15

0
SELECT firstname, lastname, m.id 
FROM members m, id_table i ON m.id=id_name 
WHERE i.id < 200