MySQL присоединяется к запросу по нескольким идентификаторам в одной ячейке - PullRequest
0 голосов
/ 22 октября 2018

у меня есть следующие данные (образец) для таблицы шаблонов

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

Итак, я хотел бы сделать SQL-запрос, который объединится с таблицами элементов и вернет все строки данных, которые совпадают / существуют в ItemIDПоле

Что-то вроде: Выбрать * из элементов Шаблон внутреннего соединения On Items.ID = Template.ItemID, где Имя шаблона = 'Test1';

Я не могу понять правильный запрос SQL, поэтому, сейчася использую цикл for, но я предпочитаю один лайнер или лучший запрос / скрипт для обработки.

в настоящее время мой код выглядит так:

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

это не очень / хорошо отформатированный код, но чтобы показать, как я сейчас работаю ... но я ищу лучший подход:)

наилучшие пожелания

1 Ответ

0 голосов
/ 22 октября 2018

Вы можете использовать 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';

Демо

Но обратите внимание, что хранение ненормализованных данныхкак вы сделали в таблице Template, это не идея вообще.Было бы гораздо лучше хранить значения ItemID в отдельных строках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...