У меня есть orders
таблицы с количеством items
, связанным с каждым заказом:Выбор элементов из списка, используя подстановочные знаки
id | ... | items
-----+-----+-----------------
34 | ... | 823, 27, 1657
678 | ... | 957
2548 | ... | 92, 823
поле orders.items
сохраняет содержимое как разделенный запятыми id
«s текстового поля. (Я знаю, что дизайн неправильный, и должна быть таблица «один-ко-многим», чтобы связывать заказы с элементами, но я ее не проектировал).
нужно выбрать заказы на основе элементов, которые они содержат:
SELECT id, items FROM orders
WHERE items LIKE IN (
SELECT CONCAT('%',id,'%') FROM items
WHERE wishlist = 0
но, очевидно, она не работает, потому что я не могу использовать LIKE
в списке элементов, полученных из IN
. Однако, это то, что я бы потребовал, потому что мне нужно было использовать %
подстановочные знаки, чтобы их найти.
Как я могу это достичь?
EDIT:
В этом SQL Fiddle есть пример моего кода возвращающихся 7 строк и пропавшие без вести 2 из них, в котором функция FIND_IN_LIST
имеет точно такое же влияние на результатах.
'order' является зарезервированным словом в MySQL, поэтому, как написано, этот запрос не будет работать в любом случае. Но в корне ваша проблема - это нормализация (или ее отсутствие). FIND_IN_SET будет делать то, что вы хотите, но это плохой заменитель правильно нормированной базы данных. – Strawberry
Я выбрал имя «заказ» только для иллюстрации - вы правы, я сделал неправильный выбор. Однако это не имя, которое я использую в своем проекте. – Jago
У вас всегда есть 3 предмета в вашей строке? – Mihai