Проверьте, существует ли содержимое ячейки в одной таблице в другой таблице - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть 2 таблицы SQL:


attributesKey

Идентификатор ------------- имя

C -------------- Хрустящие

S -------------- Soft

R -------------- Round

L -------------- Long


продукты

Пункт --------- атрибуты

Apple -------- C, R

Оранжевый ------ S, R

Bananna ---- L, S

Морковь ------- L, C


Это упрощение моей проблемы; Но я думаю, что это должно подчеркнуть проблему.

Пользователи вводят атрибуты, которые они ищут (например, Crunchy), и я должен показать продукты, которые имеют значение ключа "C" (то есть "Apple, Carrot"). ~ Псевдокод для оператора SELECT ~
SELECT * FROM производит как p ГДЕ (attributeKey.name = "Crunchy") И (p.attributes LIKE attributeKey.id)

Надеюсь, это имеет смысл. Я так долго смотрел на него, он просто стал набором случайных фигур на экране.

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

Попробуйте следующий запрос -

SELECT * FROM produce p WHERE p.attributes LIKE '%(SELECT a.id from attributesKey a where a.name="Crunchy")%'; 
0 голосов
/ 06 апреля 2011

Вы можете использовать FIND_IN_SET (str, strlist) например:

SELECT * FROM produce AS p WHERE FIND_IN_SET('C', attributes)

Вы также можете использовать логические операторы, такие как AND или OR.

Но лучшим решением было бы создать третий способ, который представляет связь между ними.(Самый простой способ, если у вас есть цифровые клавиши, если ваши таблицы)

produce_attributes (produce_id, attributes_id)

и ...

SELECT * 
FROM produce AS p
    LEFT JOIN produce_attributes AS pa ON pa.produce_id = p.id
    LEFT JOIN attributesKey AS ak ON ak.id = pa.attributes_id
WHERE ak.name = 'Crunchy'

Редактировать:

ВашattributesKey называется диктаторской таблицей , поскольку она разрешает только коды в значения.И у вас есть отношения многие ко многим между attributeKey и производим.Отношения «многие ко многим» представлены связующей таблицей в управлении реляционными базами данных (или, по крайней мере, это наиболее распространенное представление об этом).

Поэтому больше всего я рекомендую вам цифровые клавиши и третью таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...