2011-02-03 19 views
-1

這是希望一個快速的PHP的問題...從PHP數組

我已存儲的號碼的ID在一個領域上的用戶表像'1,2,3'過濾一個MySQL的結果。我現在想要針對這些數字查詢另一個表。我覺得今天早上我的大腦已經瘋狂了,因爲似乎看起來不太合適......

可以在查詢中使用'IN'嗎?

更新 -

意識到我沒有解釋我自己不夠好......

我有兩個表,一個是用戶(ID,用戶名,密碼,產品)的「產品」字段逗號分隔的id,其中與另一個包含產品信息的表相關。

我基本上是想通過查詢具有該用戶權限的數據庫來過濾用戶可以看到的內容。

+1

你真的存儲了ID作爲逗號分隔的字符串在一列嗎? – KingCrunch 2011-02-03 11:31:17

+0

問題不夠明確 – 2011-02-03 11:38:51

回答

1

您可能最好使用連接,很難從您的問題中分辨出您正在處理的是哪種數據。

Join大大提高了數據處理的效率。

不知道你的數據庫結構,這是不可能的,以幫助進一步

SELECT column_names 
FROM table_one 
INNER JOIN table_two 
ON table_one.column_name=table_two.column_name 

是基本的語法。

-1
$sql = "SELECT * FROM table 
WHERE id IN ("; 

$i=1; 
$count = count($array); 
foreach($array as $a){ 
if($i==$count){ 
$sql .= $a['id']; 
}else{ 
$sql .= $a['id'].',' 
} 
$i++; 
} 

$sql .= ")"; 

請試試這個..

2

您應該解決您的數據庫架構;那麼,查詢將是明顯而有效的。

數據庫中的每一列都應該包含原子值。如果您在單個列中存儲了多個值,則意味着您應該創建一個具有一對多關係的表格。

CREATE TABLE user_whatever (user_id int, whatever_id int) 

...每條與用戶相關的一行。要根據這些數字查詢另一個表,只需在查詢中輸入JOIN這個新表。

-1

獲取與你的第一個表中的IDS('1,2,3')場到一些變量 - >$ids

$sql = sprintf(SELECT * FROM second_table WHERE id IN (%s),$ids); 

希望這有助於。

ps .:我不建議以這種方式存儲id。

0

可以在SQL中使用沒有任何問題,但你需要將PHP數組轉換成兼容列表例如使用破滅(分離器,陣列)功能...

[更新]見此問題更新:您選擇用於保存「產品」的技術不是很好,將來會給您帶來問題。用於存儲這些值的標準解決方案是創建一個附加表(userid,productid),並且主鍵是兩個字段,您可以爲每個用戶/產品權限創建多行。

要真正使用您創建的特定解決方案,您需要運行SQL從表中獲取值,然後使用SECOND SQL使用WHERE IN $ ids來實際獲取數據(據我所知不能像這樣在字符串結果上使用IN(沒有SQL中的EVAL這樣的東西)

0

就像大家說的那樣,你應該使用原子值,但是因爲大家已經解釋過了,我只是要詳細說明你應該做的。

使用用戶表,其中包含了ID,用戶名和密碼,但沒有產品

id - username - password 
1 - mike  - XXXX 
2 - joe  - XXXX 

然後你有你的產品表

id - name     - price 
1 - Aluminum bat   - 19.99 
2 - Scattergun   - 39.99 
3 - BONK (with isotopes) - 14.99 

現在,你introdouce第三個表,這代表着什麼用戶都買了。現在

user - product 
1 - 2 
1 - 3 
2 - 1 

,如果你想選擇mike已經購買了產品,您只需選擇從第三個表的所有行的用戶ID等於1。結合外鍵和索引,查詢也應該具有更好的性能。澄清一下,這就是我的示例在當前實現中的樣子。

id - username - password - products 
1 - mike  - XXXX  - 2,3 
2 - joe  - XXXX  - 1