2011-03-09 193 views
1

我正在處理一個項目,我正在將一串數字存儲在用戶數據庫列中。PHP,MySQL查詢

我需要做一個查詢,發現所有地方該列包含數字X的用戶

例子:

Usesrs田部:

ID | NAME | CONNECTIONS 
01 | Quinton | 4,44,73,91 

我需要通過用戶查看錶並查看哪些用戶有連接#44。是否有一種有效的方式來執行此操作,而不是抓取整個表,然後遍歷每個用戶連接值。

我知道有一種方法可以做與IN()相反的功能。

+7

我是...是啊,不。你需要閱讀「正常化」。 – 2011-03-09 02:17:16

+0

這裏是一個鏈接,所以你可以做的建議[閱讀規範化](http://en.wikipedia.org/wiki/Database_normalization)。 – Charles 2011-03-09 02:22:11

+0

右鍵 - 修復設計,不要更深地挖洞。 – dkretz 2011-03-09 02:27:05

回答

2
select 
    * 
from 
    `users` 
where 
    concat(',', `CONNECTIONS`, ',') like concat('%,', @X, ',%') 
+0

+1精彩!你只是在逗號前後缺少一些'%'修飾符 – Cameron 2011-03-09 02:21:37

+0

輝煌/可怕。這將需要全表掃描。 – Charles 2011-03-09 02:23:59

+0

謝謝!我會在一秒鐘之內給出這個,就是這樣說的。這樣做會更快嗎?或者,創建一個每個連接都作爲條目的新表? – 2011-03-09 02:25:42

7

如果可能的話,如果可能的話,規範化模式以使字符串搜索不成問題會更好。

CREATE TABLE Users 
(
    UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    Name VARCHAR(100) 
) 

CREATE TABLE UserConnections 
(
    UserId INT NOT NULL REFERENCES Users (UserId), 
    Connection INT NOT NULL 
) 

另外,索引UserConnections中的Connection列。然後,搜索連接列。它會更快。