【发布时间】:2019-10-04 18:16:47
【问题描述】:
我有 3 张桌子:
- 服装
- 项目
- 颜色
装备表具有多对多属性的物品
项目表与颜色的关系与manyToOne关系
关系看起来像这样
我需要使用以下逻辑创建搜索功能: 如果用户输入“red 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
所以这是错误的,因为如果我需要按 case 子句排序,我需要在 GROUP BY 子句上添加 i.id, 但我只需要买衣服
我们的目标是首先获得在他的名字中有关键字的产品
目前我还没有任何想法搜索项目名称,只有 airmax 不是红色,如果有人知道怎么做,也请说一下
数据库示例
表格:服装
id: 1, name: 'vero moda';
id: 2, name: 'street one';
表格:项目
id: 1, color_id: 3, name: 'Vero moda sweetch';
id:2,color_id:1,名称:'Nike Airmax';
id: 3, color_id: 2, name: '佩佩牛仔裤';
id:4,color_id:2,名称:'Naketano';
id: 5, color_id: 3, name: 'Dockers By Gerli Stiefel';
id:6,color_id:2,名称:'牛仔裤';
表格:服饰
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;
表格:颜色
id:1,名称:黑色;
id:2,名称:蓝色;
id:3,名称:粉色;
【问题讨论】:
-
这还不清楚。您能否展示所有 3 个表的样本数据记录以及预期结果?
-
那里的加入并不反映“多对多”关系。是不是忘了两张关系表?
-
您错过了
ON两个JOIN的条件 -
哦,对不起,产品颜色是多方关系,我会编辑
标签: php sql symfony doctrine dql