2011-03-09 152 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列。然后,搜索连接列。它会更快。