Гораздо лучшая структура ваших таблиц будет:
I. Персона (personid, имя) --- покупки удалены отсюда
II. Покупка (идентификатор покупки, идентификатор покупателя, продукт, дата покупки) --- добавлен идентификатор покупателя
III. Каталог (продукт, продукт, цена за единицу)
Таким образом, вместо хранения покупок человека в таблице Person, сохраните их в таблице покупок.
Thisбудет иметь несколько преимуществ:
Вы можете хранить столько покупок, сколько захотите.Как сейчас, поле «покупки» будет в конечном итоге заполнено покупками, и что вы будете тогда делать?
Проще писать свои запросы.
(Если в Person.purchases есть ", 1,300,292," сохраненные в нем, например, запятые в начале и конце поля и без пробелов), на ваш вопрос можно ответить одним запросом:1031 * Если в начале и в конце есть пробелы и нет запятых, условие будет более сложным, но, безусловно, это можно сделать.
SELECT p.id, p.name
FROM Person p
JOIN Purchase pur
ON p.purchases LIKE CONCAT("%,",CAST(pur.id AS CHAR),",%")
WHERE pur.product LIKE "foo"
И объединение с Catalog
не требуется, поскольку Product
имя тоже в таблице Purchase
.
Если вы хотите получить информацию от Catalog
, вы можете использовать и другое соединение:
SELECT p.id, p.name, cat.*
FROM Person p
JOIN Purchase pur
ON p.purchases LIKE CONCAT("%,",CAST(pur.id AS CHAR),",%")
JOIN Catalog cat
ON pur.product = cat.product
WHERE pur.product LIKE "foo" ---or cat.product LIKE "foo"