Вопрос Как найти строки, которые соответствуют значению в одном столбце (с использованием оператора =) и другому столбцу, должны иметь подстроку (используя find_in_set или другое совпадение подстроки).Извлечь строку из таблицы, которая соответствует значению в одном столбце, и наличие подстроки в разделительной запятой в другом столбце
Сценарий: У меня есть три таблицы: MySQL
1. Цифры: Это есть детали фигур, как идентификатор, имя, создать-на, сотворено на, модифицированных на статус и т.д. для простоты я упомянул только две колонки:
id | name
1 | red green yellow circle
2 | red square in yellow circle
3 | 3D yellow red trapezium
2. атрибуты: Он хранит различные атрибуты со всеми возможными значениями, разделенными запятой для каждого атрибута.
id | term | value
1 | shape | circle,square,rectangle,parallelogram,trapezium
2 | color | red,green,yellow,blue,white,orange
3 | dimension | 1D,2D,3D
3. Рисунок Атрибут Картирование: Он хранит отображение фигуры, атрибуты и только те, разделенную запятая значения, которые применимы к этой конкретной комбинации фигурного атрибута.
id | figure_id | attribute_id | value
1 | 1 | 1 | circle
2 | 1 | 2 | red,green,yellow
3 | 2 | 1 | circle,square
4 | 2 | 2 | red,yellow
5 | 3 | 1 | trapezium
6 | 3 | 2 | yellow,red
7 | 3 | 3 | 3D
Цель: Я хочу написать запрос, который возвращает меня figure_id из figure_attribute_mapping таблицы на соответствие значения атрибута в этом atribute фигурой отображения строки.
Дело I: поиск фигуры квадратной формы. Мой запрос:
Select figure_id from figure_attribute_mapping
where (attribute_id = 1 AND find_in_set('square',value)<>0);
Ожидаемый ответ: 2 Результат: Положительный
Case II: поиск красный цвет фигуры. Мой запрос:
select figure_id from figure_attribute_mapping
where (attribute_id = 2 AND find_in_set('red',value))
Ожидаемый ответ: 1, 2, 3 Результат: Положительный
Case III: поиск красного цвета квадратной фигуры. Мой запрос:
select figure_id from figure_attribute_mapping
where
(attribute_id = 1 AND find_in_set('square',value)<>0)
AND (attribute_id = 2 AND find_in_set('red',value)<>0)
Ожидаемый ответ: 2 Результат: отрицательный
Case IV: поиск красный квадрат в желтый круг фигуры. Мой запрос:
select figure_id from figure_attribute_mapping
where
(
(attribute_id = 1 AND find_in_set('square',value)<>0)
AND (attribute_id = 1 AND find_in_set('circle',value)<>0)
)
AND
(
(attribute_id = 2 AND find_in_set('red',value) <>0)
AND (attribute_id = 2 AND find_in_set('yellow',value)<>0)
)
Ожидаемый ответ: 2 Результат: отрицательный
Я могу найти figure_id когда тип атрибута похож, но не может найти figure_id когда несколько атрибутов приходит вопрос.
Может кто-то помочь в создании запроса mysql.
Вы можете урезать свой вопрос немного? –
@TimBiegeleisen: Извините, я написал большой вопрос, объясняющий все о моей ситуации, просто чтобы убедиться, что я делаю это наилучшим образом. Пожалуйста, спросите, если вы запутались из-за более подробного объяснения. – Sarge