У меня есть 3 стола:
- наряд
- предмет
- цвет
стол наряд имеет вещи с объектами ManyToMany
таблица элементов имеет отношение к цвету с отношением manyToOne
Отношения выглядят так
Мне нужно создать функцию поиска сэта логика: если пользователь вводит "красный airmax", я ищу одежду, если нет одежды с этим именем, я ищу продукт, если нет также одежды с этим именем, я ищу по цвету
, поэтому, когда я ищу по цвету, яполучил элементы с красным цветом, но не с airmax, и я хочу найти airmax в элементах по этой логике, если DB обнаружит продукты с красным цветом, проверьте также название продукта airmax
Я использую symfony / doctrine. мой sql-код с цветами будет выглядеть так:
SELECT o FROM OutfitsBundle:Outfits o
LEFT JOIN o.item i
LEFT JOIN i.color c
WHERE c.name LIKE '%red%'
OR c.name LIKE '%airmax%'
GROUP BY o.id
ORDER BY
CASE
WHEN i.name LIKE '%airmax%' THEN 1
ELSE 0
END
Так что это неправильно, потому что если мне нужно отсортировать по кейсу, мне нужно добавить i.id к предложению GROUP BY, но мне нужно получить только наряды
Цельчтобы получить в первую очередь те товары, которые имеют ключевое слово в своем имени
Пока я не имею ни малейшего представления о том, чтобы искать по названию товара только airmax, а не красный, если кто-нибудь знает, как это сделать, скажите, пожалуйста, также об этом
Пример БД
Таблица: экипировка
id: 1, имя: 'vero moda';
id: 2, имя: 'street one';
Таблица: Элементы
id: 1, color_id: 3, имя: 'Vero moda sweatch';
id: 2, color_id: 1, имя: 'Nike Airmax';
id: 3, color_id: 2, имя: 'Pepe jeans';
id: 4, color_id: 2, имя: 'Naketano';
id: 5, color_id: 3, имя: 'Dockers ByGerli Stiefel ';
id: 6, color_id: 2, имя:' Jeans ';
Таблица: Outfititems
id: 1, outfit_id: 1,item_id: 1;
id: 2, outfit_id: 1, item_id: 5;
id: 3, outfit_id: 1, item_id: 6;
id: 4, outfit_id: 2, item_id: 2;
id: 5, outfit_id: 2, item_id: 3;
id: 6, outfit_id: 2, item_id: 4;
Таблица: Цвет
идентификатор: 1, имя: черный;
идентификатор: 2, имя: синий;
идентификатор: 3, имя: розовый;