Выборка по перечислению через запятую - MySQL

Узнай цену своей работы

Формулировка задачи:

Всем привет, как то можно стандатными средствами сделать данную выборку?
SELECT id FROM `images` WHERE `iditem` IN (SELECT `id` FROM `catalog` WHERE `art` IN (SELECT `childs` FROM `catalog` WHERE `id` = '4113'))
крайний вложенный запрос возвращает артикулы чилдов через запятую, такова особенность в текущем сайте.. т.е. запрос дает строку вида F1651,6512,G81651,FG1651, по этим артикулам в этой же таблице надо забрать id этих записей, и затем забрать id фотографий для этих элментов и что то я зачах, как это реализовать одним запросом mysql без explode\implode в php

Решение задачи: «Выборка по перечислению через запятую»

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'. Список элементов кода:

  1. SELECT id FROM images
  2. WHERE iditem IN (...)
  3. (SELECT catalog.Id FROM catalog WHERE id = '4113')
  4. CROSS JOIN catalog
  5. WHERE LOCATE(catalog.art ,ch.childs) > 0 Обратите внимание, что в этом коде используется функция LOCATE для проверки наличия подстроки в строке. Функция возвращает позицию первого вхождения подстроки в строку. Если подстрока не найдена, функция возвращает 0. Поэтому условие LOCATE(catalog.art ,ch.childs) > 0 означает, что подстрока из поля childs таблицы catalog должна быть найдена в поле art таблицы catalog, и это значение должно быть больше 0 (то есть, подстрока должна быть найдена не в начале строки).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.5 из 5
Похожие ответы