У меня есть таблица, в которой хранятся метаданные для записей из другой таблицы. Метаданные таблица выглядит следующим образом (я удалил относящийся Идентификаторы так что более очевидно):MySQL: поиск одной таблицы несколько раз?
id entry_id property value
1 12 color blue
2 12 shape circle
3 13 color red
4 13 shape circle
5 14 color blue
6 14 shape square
7 15 material stone
8 12 material plastic
Теперь я хочу, чтобы искать эту таблицу для свойств, как выбрать все записи, где цвета является синим :
select entry_id from table where property = 'color' and value = 'blue'
до сих пор, так хорошо. Но как мне расширить запрос, когда у меня есть несколько условий? Например, я хочу, чтобы найти все записи, где цвета является синего и форма является кругом. Сейчас я бы добиться этого с профсоюзами:
select entry_id from table where property = 'color' and value = 'blue'
union
select entry_id from table where property = 'shape' and value = 'circle'
это, очевидно, получает некрасиво больше свойств, которые я хочу, чтобы искать. И я думаю, что это тоже не очень быстро. Есть ли более элегантный способ сделать это? Причиной этой таблицы является то, что у меня есть объекты с метаданными, которые могут быть установлены пользователем.
Спасибо!
Чтобы получить божественную силу, не имеет значения, какое решение вы принимаете, вам нужно создать индекс (entry_id, property, value). Если эта тройка не является первичным ключом. –