PHP,MySQL查询

PHP,MySQL查询,php,mysql,Php,Mysql,我目前正在从事一个项目,在该项目中,我将在用户数据库列中存储一组数字 我需要做一个查询,找到该列包含数字X的所有用户 例如: 使用表格: ID | NAME | CONNECTIONS 01 | Quinton | 4,44,73,91 我需要查看用户表,看看哪些用户有连接。是否有一种有效的方法来执行此操作,而不是抓取整个表,然后检查每个用户连接值 我知道有一种方法可以用()中的做相反的事情。如果可能的话,最好规范化您的模式,使字符串搜索不成问题 select * from `

我目前正在从事一个项目,在该项目中,我将在用户数据库列中存储一组数字

我需要做一个查询,找到该列包含数字X的所有用户

例如:

使用表格:

ID | NAME | CONNECTIONS
01 | Quinton | 4,44,73,91
我需要查看用户表,看看哪些用户有连接。是否有一种有效的方法来执行此操作,而不是抓取整个表,然后检查每个用户连接值


我知道有一种方法可以用()中的
做相反的事情。

如果可能的话,最好规范化您的模式,使字符串搜索不成问题

select
    *
from
    `users`
where
    concat(',', `CONNECTIONS`, ',') like concat('%,', @X, ',%')
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列编制索引。然后,搜索连接列。这会快得多。

如果可能的话,最好规范化您的模式,使字符串搜索成为一个非问题

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列编制索引。然后,搜索连接列。速度会快得多。

我。。。是的,不。你需要阅读“标准化”。这里有一个链接,你可以做推荐的。正确-修复设计,不要把洞挖得更深。我。。。是的,不。你需要仔细阅读“标准化”。这里有一个链接,这样你就可以做推荐的。正确-修复设计,不要把洞挖得更深。+1太棒了!您只是缺少了逗号Brilliant/Thready前后的一些“%”修饰符。这将需要一个完整的表格扫描。谢谢!话虽如此,我马上就要试一试了。这样做会更快吗?或者,创建一个新表,将每个连接作为一个条目?它甚至都不接近。添加表。这样做会减少工作量,但最终将是一个巨大的性能sap。在一个字段中存储多个值是不好的做法。从长远来看,更改表结构以使其更加规范化将对您和您的代码有很大的好处。+1辉煌!您只是缺少了逗号Brilliant/Thready前后的一些“%”修饰符。这将需要一个完整的表格扫描。谢谢!话虽如此,我马上就要试一试了。这样做会更快吗?或者,创建一个新表,将每个连接作为一个条目?它甚至都不接近。添加表。这样做会减少工作量,但最终将是一个巨大的性能sap。在一个字段中存储多个值是不好的做法。从长远来看,将表结构更改为更加规范化将对您和您的代码有很大的好处。