老实说,我不知道我的问题的正确标题,而且我还是关于查询事物的新手。所以我有这样的表名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


也许有人可以帮助我,谢谢大家,祝您愉快!干杯!

最佳答案

这样您就可以实现您想要的:

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前面有逗号或
categoryfood/fashion开头或
categoryfood/fashion结尾或
food/fashion之后是逗号。


建议:

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

10-05 20:17