【问题标题】:MySQL Join Query By Multiple ID In Single CellMySQL在单个单元格中通过多个ID连接查询
【发布时间】:2018-10-22 05:21:40
【问题描述】:

我有以下模板表的数据(样本)

TempName, ItemID
Test1, 1/5/6/8/11
Test2, 2/4/5/8/10

所以,我喜欢做一个 sql 查询,它将与 Item Tables 连接并返回 ItemID 字段中匹配/存在的所有数据行

类似: Select * From Items Inner Join Template On Items.ID = Template.ItemID Where Template Name = 'Test1';

我无法计算出正确的 sql 查询,所以现在我正在使用 for 循环,但我更喜欢使用一个衬里或更好的查询/脚本来处理它。

目前我的代码是这样的:

Select ItemID From Template Where Name = 'Test1';
$strItems = explode('/', ItemID)
foreach($strItem in $strItems)
{
 select * from Items where ID = $strItem
}

这不是漂亮/格式良好的代码,而是显示我现在的工作方式.. 但我正在寻找更好的方法:)

最好的问候

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    您可以在此处使用FIND_IN_SET,只需一个查询:

    SELECT i.*
    FROM Items i
    INNER JOIN Template t
        ON FIND_IN_SET(i.ID, REPLACE(t.ItemID, '/', ',')) > 0
    WHERE
        t.Name = 'Test1';
    

    Demo

    但请注意,像您在Template 表中所做的那样存储非规范化数据根本不是主意。将ItemID 值存储在不同的行中会更好。

    【讨论】:

    • Bigeleisen,但是先生,在这种情况下,我将在模板表上有这么多行,其中所有行都将具有相同的“名称”值。看起来是不是很奇怪?
    • 一点也不。实际上,是的,它看起来很奇怪,那是因为您也不应该在那里重复模板名称。相反,有一些 template_id 值并使用它,然后有另一个表将 template_id 与实际模板名称相关联。
    • 感谢您的回复,但我的另一个想法/逻辑是如果真的不需要,不要创建不必要的表。顺便说一句,这与这个问题无关..你的回答很棒。再次感谢。
    • 您没有创建不必要的表是对的,但如果需要规范化您的数据,那么这样的表当然不是必需的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多