在列中查询多个值

时间:2015-02-20 22:59:04

标签: php mysql

我有一张表:

id     name            children
1      Roberto         Michael,Dia
2      Maria           John,Alex
3      Mary            Alexandre,Diana

我的问题是; 我想找一个名叫亚历克斯的孩子。

我无法在SQL中使用"where children = 'Alex'",因为我在同一个单元格中有多个名称。

所以我使用"where children LIKE '%Alex%'" - 看起来很聪明但是 在同一时间,我得到所有开始像亚历克斯:(亚历山大 或者我想得到dia但结果是dia和diana :(

如何在该数据类型中获得单个Alex?

我希望我用可怕的英语来解释我的问题:D

4 个答案:

答案 0 :(得分:6)

最佳解决方案是规范化架构。您应该有一个单独的表,每个子项都有一行,而不是逗号分隔的列表。然后,您可以加入此表以查找具有特定子项的父项。有关此示例,请参阅@ themite的答案。

但如果由于某种原因你不能这样做,你可以使用FIND_IN_SET

WHERE FIND_IN_SET('Alex', children)

答案 1 :(得分:0)

您应该将数据拆分为两个表。

第一个看起来像这样

ID    Name
1     Roberto
2     Maria
3     Mary

第二个就像这样

ParentId     child
1            Michael
1            Dia
2            John
2            Alex

等等。

然后您可以执行所需的查询,而无需担心like并且您的数据更有用

答案 2 :(得分:0)

这就是为什么你想在这里有两张桌子。

parents:
id  name
1   Roberto  
2   Maria
3   Mary

children:
id  parentid name
1   1        Michael
2   1        Dia
3   2        John
4   2        Alex
5   3        Alexandre
6   3        Diana

现在,您可以使用join或exists更有效地查询:

SELECT *
FROM Parents
WHERE EXISTS(
    SELECT * 
    FROM Children 
    WHERE parentid=Parents.id 
      AND Children.name='Alex'
 )

答案 3 :(得分:0)

我宁愿为孩子和父母制作不同的表格。

父母表

parent_id     name            
1             Roberto         
2             Maria           
3             Mary     

儿童表

children_id  parent_id  name
1            1          Michael     
2            1          Dia 
3            2          John

....等等