如何用逗号分隔的行中的where子句数据选择查询

时间:2016-05-14 05:19:42

标签: mysql

老实说,我不知道我的问题的正确标题,我仍然是查询事物的新手。所以我有像这样的表名EVENT

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 个答案:

答案 0 :(得分:1)

这样你就可以达到你想要的效果:

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

SQL FIDDLE DEMO

注意: 如果要在上面的查询中看到生成的正则表达式:

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

<强>结果: (^|,)(Food|Fashion)(,|$)

说明: 只有满足以下任何条件时才会选择Food/fashion category food/fashion的记录:

  • category之前有逗号
  • food/fashioncategory
  • 开头
  • food/fashionfood/fashion

  • 结尾
  • {{1}}后面有一个逗号

<强>建议:

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