我有3张桌子:
服装搭配表中包含多对多现实的物品项目表与颜色具有多对一关系]
关系看起来像这样
我需要使用以下逻辑创建搜索功能:如果用户输入“ red airmax”,我会寻找服装如果没有这个名字的服装,我会搜索产品如果还没有这个名字的服装,我会按颜色搜索
所以当我用颜色搜索时,我得到的是红色但不是airmax的项目,我也想通过这种逻辑在项目中搜索airmax,如果DB发现红色产品,也检查产品名称为airmax
我正在使用symfony /主义因此我的带有颜色的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
所以这是错误的,因为如果我需要按case子句排序,则需要在GROUP BY子句上添加i.id,但我只需要穿衣服
目标是首先获得名称中带有关键字的产品
目前,我还不知道只搜索airmax而不是红色的项目名称,如果有人知道怎么做也请说一下
数据库示例
表:服装id:1,名称:“ vero moda”;id:2,名称:“ street one”;
表:项目id:1,color_id:3,名称:“ Vero moda运动”;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 By Gerli Stiefel”;id:6,color_id:2,名称:“ Jeans”;
表:服装项目id:1,suite_id:1,item_id:1;id:2,suite_id:1,item_id:5;id:3,suite_id:1,item_id:6;id:4,suite_id:2,item_id:2;id:5,suite_id:2,item_id:3;id:6,suite_id:2,item_id:4;
表:颜色id:1,名称:黑色;id:2,名称:蓝色;id:3,名称:粉红色;
您提供的详细信息不足,但我会尝试...
SELECT distinct o.name
FROM outfits o
inner JOIN item i = i.itemid = o.itemid
inner JOIN color c on c.colorid = i.colorid
WHERE c.name LIKE '%red%'
OR c.name LIKE '%airmax%'
or o.name like '%red%'
OR o.name LIKE '%airmax%'
or i.name like '%red%'
OR i.name LIKE '%airmax%'
ORDER BY
CASE
WHEN o.name LIKE '%airmax%' THEN 1
ELSE 0
END desc