У меня есть таблица MySQL со столбцами: имя и метка.Если у человека «Боб» есть метки «круто», «смешно» и «по-детски», моя таблица будет иметь соответствующие строки: (Боб, круто), (Боб, забавно) и (Боб, ребячество).
Существует ли эффективный способ выбора людей на основе меток с помощью логического запроса?Например, в псевдо-SQL: ВЫБЕРИТЕ имя, ГДЕ человек (ХОЛОДНЫЙ ИЛИ НЕ СМЕШНЫЙ) И НЕ ДЕТСКИЙ.
Я думаю, что я мог бы взломать что-то вместе, используя UNION, JOIN, возможно, некоторые подзапросы, ноинтересно, был ли эффективный способ сделать это.
РЕДАКТИРОВАТЬ:
На данный момент я планирую распространять И, т. е. ((COOL ИЛИ НЕ СМЕШНО) И НЕ CHILDISH) =>(ХОЛОДНО И НЕ ДЕТСКИЙ) ИЛИ (НЕ СМЕШНЫЙ И НЕ ДЕТСКИЙ).И затем я могу определить каждую из частей, которые были бы OR, вместе с чем-то вроде:
SELECT DISTINCT a.name
FROM `tags` AS a
JOIN `tags` AS b ON (a.label='cool' AND a.name=b.name AND b.name NOT IN (
SELECT name FROM `tags` WHERE label='funny'))
JOIN `tags` AS c ON (a.name=c.name AND c.name='childish')
# for "COOL AND NOT FUNNY AND CHILDISH"
И затем использовать UNION, чтобы соединить их вместе.