Выборка по перечислению через запятую - MySQL
Формулировка задачи:
Всем привет, как то можно стандатными средствами сделать данную выборку?
крайний вложенный запрос возвращает артикулы чилдов через запятую, такова особенность в текущем сайте..
т.е. запрос дает строку вида F1651,6512,G81651,FG1651, по этим артикулам в этой же таблице надо забрать id этих записей, и затем забрать id фотографий для этих элментов
и что то я зачах, как это реализовать одним запросом mysql без explode\implode в php
SELECT id FROM `images` WHERE `iditem` IN (SELECT `id` FROM `catalog` WHERE `art` IN (SELECT `childs` FROM `catalog` WHERE `id` = '4113'))
Решение задачи: «Выборка по перечислению через запятую»
textual
Листинг программы
SELECT id FROM images WHERE iditem IN ( SELECT catalog.Id FROM (SELECT childs FROM catalog WHERE id = '4113') ch CROSS JOIN catalog WHERE LOCATE(catalog.art ,ch.childs) > 0 )
Объяснение кода листинга программы
В этом коде происходит выборка из таблицы images по значению поля iditem. При этом значение iditem находится с помощью вложенного запроса. Вложенный запрос сначала выбирает поле childs из таблицы catalog, где значение поля id равно '4113'. Затем это поле используется в основном запросе для сравнения с полем art таблицы catalog. Результатом будет выборка всех записей из таблицы images, где значение iditem содержится в поле art таблицы catalog и соответствует значению '4113'.
Список элементов кода:
- SELECT id FROM images
- WHERE iditem IN (...)
- (SELECT catalog.Id FROM catalog WHERE id = '4113')
- CROSS JOIN catalog
- WHERE LOCATE(catalog.art ,ch.childs) > 0
Обратите внимание, что в этом коде используется функция LOCATE для проверки наличия подстроки в строке. Функция возвращает позицию первого вхождения подстроки в строку. Если подстрока не найдена, функция возвращает 0. Поэтому условие LOCATE(catalog.art ,ch.childs) > 0 означает, что подстрока из поля
childsтаблицыcatalogдолжна быть найдена в полеartтаблицыcatalog, и это значение должно быть больше 0 (то есть, подстрока должна быть найдена не в начале строки).