2012-09-13 83 views
2

編輯: 謝謝Baylor Rae和JvBerg - 您的回答/評論幫助解決了這個問題。 我不得不刪除引號 - 我沒有意識到。 謝謝大家的幫助。Mysql IN子句只檢索1行


我試圖從使用IN子句中的「警報」表where ownerid='$friend_ids'選擇的所有數據。 我遇到的問題(儘管大量的谷歌搜索和代碼更改)是它只檢索一行。

$fid=$ClassUsers->Friendids($user_id); 
echo $fid; 

其中返回(按預期)1,2,3。

但是當試圖: 「1」 只排

$sql="SELECT * FROM alerts WHERE ownerid IN('$fid')"; 
echo mysql_num_rows($db->query($sql)); 

回報。

我警報表:

Alerts table

有誰知道爲什麼嗎?或者如何解決這個問題? 我昨天一整天都在整夜呆着,前一天和今天幾個小時用Google搜索並嘗試用不同的方式來查詢這個。 謝謝。

+3

嘗試刪除'$ fid'周圍的單引號 –

+0

'$ fid'的值是什麼?你的最終查詢是什麼樣的? – deceze

+1

@BaylorRae說了什麼 - 回顯你的SQL,並在數據庫中運行它 - 它會告訴你到底是什麼錯誤。 – andrewsi

回答

1

如果$fid是一個數組,你需要做的是這樣

$fid_sql = implode(','. $fid); 
$sql="SELECT * FROM alerts WHERE ownerid IN($fid_sql)"; 

注意,你不應該需要單引號圍繞每個值在這裏,如果他們是在DB整數字段。

如果$fid是一個字符串=「1,2,3」,那麼您所要做的就是擺脫查詢中圍繞$fid的單引號。

+0

我的確破壞了陣列,正如你所說的,我把它變成了一個字符串 - 我不知道的是刪除引起問題的引號。 – RobAtStackOverflow

1

這取決於$ FID值:

$fid = '1, 2, 3'; 
$sql="SELECT * FROM alerts WHERE ownerid IN($fid)"; 
echo mysql_num_rows($db->query($sql)); 

將返回所有3行。

+1

不是。它只會返回其'ownerid'字面意思爲「1,2,3」的行。 – deceze

+0

不,'IN('$ fid')'只會返回行WHERE ownerid =「1,2,3」'。這些值必須單獨引用 - 例如:WHERE ownerid IN('1','2','3') - 如果它們是數字,則根本不可以引用 - 例如:WHERE ownerid IN( 1,2,3)'。 – user113215

+0

看看我寫的IN($ fid)!教程在這裏http://www.tutorialspoint.com/mysql/mysql-in-clause.htm – JvdBerg

1

嘗試引用你的價值觀

IN ('1', '2', '3') 

否則它看起來是字面上 '1,2,3' 而不是 '1' 或 '2' 或 '3' 的值。