2016-05-14 144 views
0

老实说,我不知道我的问题的正确标题,我仍然是关于查询事项的新手。所以我有表名这样的事件如何用逗号分隔的行中的where子句数据选择查询

id_event  name_event   category 
---------------------------------------------- 
    1   Market  Food,Fashion,Art 
    2   Concert    Music 
    3   FoodTruck  Food,Bevarage 

我的问题是我想选择category =“Food,Fashion”的类别。因此,所有类别其中有“食品”和“时尚”将在外,结果是这样

id_event  name_event   category 
---------------------------------------------- 
    1   Market  Food,Fashion,Art 
    3   FoodTruck  Food,Bevarage 

也许有人可以帮助我,谢谢你们,有一个愉快的一天! Cheerss!

+1

遗憾地说,你有一个错误的数据库设计。逗号分隔的数据在字段中始终是这个标志。请在进一步深入研究之前对其进行分类,因为进一步下去会更困难。 – e4c5

回答

1

这样就可以达到你想要的东西:

SELECT 
* 
FROM event 
WHERE category REGEXP CONCAT('(^|,)(', REPLACE("Food,Fashion", ',', '|'), ')(,|$)'); 

SQL FIDDLE DEMO

注: 如果你想看到在上面的查询生成的正则表达式:

SELECT CONCAT('(^|,)(', REPLACE("Food,Fashion", ',', '|'), ')(,|$)') AS 'REGEXP'; 

结果: (^|,)(Food|Fashion)(,|$)

说明:记录将有Food/fashioncategory只有当以下条件的人得到满足名称来选择:

  • food/fashion逗号前或
  • category以开头或
  • category结束与food/fashion

  • food/fashion具有逗号后它。

建议:

Is storing a delimited list in a database column really that bad?

+0

谢谢@ 1000111为您的答案,再次感谢您的链接 – Rei

+0

非常感谢您的解释! – Rei

+0

不客气Sir :) – 1000111