-4

玩了2个小时,我就是想不通。在我的 MySql 表中,我有一个名为“conflicts”的列,其中包含一个逗号分隔的“menu_names”字符串,这是另一列,单击它时无法单击该列。

字符串中的每个“menu_name”都需要该“menu_name”所在的行也包含在它的冲突字符串中。

假设我的表中有这四行;

        menu_name                conflicts
        ====================================================
        Apple             |      Banana,Carrot
        Banana            |      Apple,Carrot
        Carrot            |      Apple,Banana
        Bean              |      Carrot

在上面的例子中,我们看看苹果的冲突,看看香蕉,胡萝卜。在检查 Banana 的冲突时,我们找到 Apple,在检查 Carrot 时,我们还找到 Apple,这很好,我不想要那个记录。香蕉和胡萝卜也被忽略了。

当我们查看 Bean 时,我们发现它与 Carrot 冲突。检查 Carrot 时,我们没有找到 Bean,因此这是本示例中查询将返回的唯一记录。

这甚至可以通过单个查询来完成吗?

4

2 回答 2

3

首先,Bluefeet 是对的。您应该以标准化格式存储数据。也就是说,您应该有一个名为 MenuConflicts 之类的表,其中一列用于Menu_Name,另一列用于 one 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子句检查附加的互惠条件。

于 2013-09-04T21:18:42.427 回答
0

SO上有一些答案

您必须做的是类似搜索,其中您要查找的值用于 WHERE LIKE 子句

在以下链接中,您将找到一些有关如何操作的示例。

我复制了一份给你

SELECT *
FROM Table
WHERE Field LIKE 'Banana,%'
OR Field LIKE '%,Banana'
OR Field LIKE '%,Banana,%'
OR Field = 'Banana'

现在你必须在它们之间建立关系

于 2013-09-04T21:21:38.570 回答