2016-08-19 27 views
-4
Table example: 
id - registro - valor 
1 - compras - 1,2,6 
2 - ventas - 3,4 
3 - deudas - 5 
4 - Something - 13,14,15,16,10 

我在数据库中有这个表。我想做一个查询,我只发送数字3,并带上寄存器2.在这个例子中。可以办到。 IN探测与否,我用CONTAINS尝试过,但都没有。我应该做...帮助作为返回包含多个逗号分隔值的记录php mysql

+3

'find_in_set'是你的朋友。但是你应该考虑你的数据库设计。将值存储为csv非常糟糕db设计 – Jens

+0

我没有将数据存储为csv。仅使用逗号作为分隔符将数组转换为字符串。就是这样.. –

回答

1

就像@Jens说的,你可以用the FIND_IN_SET() function来达到这个目的。

SELECT registro 
    FROM tbl 
WHERE FIND_IN_SET('3', valor) > 0 

而就像@Jens所说,这是糟糕的数据库设计。在一行的特定列中存储多个值会破坏RDMS系统中的许多优化。

你会用两个表更好:

master_id - registro 
1  - compras 
2  - ventas 
3  - deudas 
4  - Something 

细节(注意这里有一个valor每排在这里)

master_id - valor 
    1  - 1 
    1  - 2 
    1  - 6 
    2  - 3 
    3  - 4 
    etc. 

然后你就可以像使用查询此

SELECT master.registro 
    FROM detail 
    JOIN master ON master.master_id = detail.master_id 
    WHERE detail.valor = 3 

正常化这样的表可能看起来像很多额外的工作。但是,如果您的应用程序规模扩大,那么这样做会快数万倍。认真。