简体   繁体   English

MySQL通过单个单元格中的多个ID加入查询

[英]MySQL Join Query By Multiple ID In Single Cell

i have following data (sample) for template table 我有以下数据(样本)用于模板表

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

So, i like to make a sql query that will join with Item Tables And Return All the rows of data that matched/exists in ItemID Field 因此,我想进行一个SQL查询,该查询将与Item Tables联接并返回ItemID字段中匹配/存在的所有数据行

Something like: Select * From Items Inner Join Template On Items.ID = Template.ItemID Where Template Name = 'Test1'; 类似于:选择*从Items.ID = Template.ItemID的项目内部联接模板,其中模板名称='Test1';

i can't figure correct sql query so, now i am using a for loop and but i prefer one liner or better query/script to handle that. 我无法计算出正确的sql查询,因此,现在我使用的是for循环,但我更喜欢使用衬板或更好的查询/脚本来处理。

currently my code is like: 目前我的代码是这样的:

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

that's not the pretty/well formatted code, but to show how i am working now.. but i am looking for a better approach :) 那不是漂亮/格式正确的代码,而是为了展示我现在的工作方式。但是我正在寻找更好的方法:)

best regards 最好的祝福

You may use FIND_IN_SET here, with a single query: 您可以在此处通过单个查询使用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 演示

But note that storing unnormalized data as you have done in the Template table is not idea at all. 但是请注意,根本不像在Template表中那样存储未标准化的数据。 It would be much better to store the ItemID values across separate rows. 在单独的行中存储ItemID值会更好。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM