已经玩了2个小时,我无法弄明白。在我的MySql表中,我有一个名为'的冲突'它包含一个以逗号分隔的' menu_names'字符串,这是另一列,单击它时无法点击。
每个' menu_name'在字符串中需要该行' menu_name'也有它自己的冲突字符串。
我们说我的桌子上有这四行;
menu_name conflicts
====================================================
Apple | Banana,Carrot
Banana | Apple,Carrot
Carrot | Apple,Banana
Bean | Carrot
在上面的例子中,我们看看Apple的冲突,看看Banana,Carrot。在检查Banana的冲突时,我们找到了Apple,当我们检查Carrot时,我们也找到了Apple,这样做很好,而且我不想要那个记录。香蕉和胡萝卜也会过去。
当我们看到Bean时,我们发现它与Carrot有冲突。检查Carrot时,我们找不到Bean,这是查询在此示例中返回的唯一记录。
这甚至可以用一个查询吗?
答案 0 :(得分:3)
首先,Bluefeet是对的。您应该以标准化格式存储数据。也就是说,你应该有一个名为MenuConflicts的表,其中一列为Menu_Name
,另一列为Conflict
。
也就是说,你可以使用find_in_set()
:
select *
from t t1 join
t t2
on find_in_set(t2.menu_name, t1.conflicts) > 0
where find_in_set(t1.menu_name, t2.conflicts) = 0;
联接匹配第二个菜单名称在第一个冲突列表中的任何行。然后where
子句检查额外的互惠条件。
答案 1 :(得分:0)
SO上有一些答案
你必须要做的就是搜索你正在寻找的值taht用于WHERE LIKE子句
在以下链接中,您将找到一些有关如何操作的示例。
我为你复制了一个
SELECT *
FROM Table
WHERE Field LIKE 'Banana,%'
OR Field LIKE '%,Banana'
OR Field LIKE '%,Banana,%'
OR Field = 'Banana'
现在你必须在他们之间建立关系