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

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

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

Всем привет, как то можно стандатными средствами сделать данную выборку?
Листинг программы
  1. 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
Листинг программы
  1. SELECT id FROM images WHERE iditem IN (
  2.   SELECT catalog.Id  
  3.   FROM
  4.     (SELECT childs FROM catalog WHERE id = '4113') ch
  5.     CROSS JOIN catalog
  6.   WHERE
  7.     LOCATE(catalog.art ,ch.childs) > 0
  8. )

Объяснение кода листинга программы

В этом коде происходит выборка из таблицы 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы