Php SQL CASE子句中的ORDER BY子句与JOIN

Php SQL CASE子句中的ORDER BY子句与JOIN,php,sql,symfony,doctrine,dql,Php,Sql,Symfony,Doctrine,Dql,我有三张桌子: 装备 项目 颜色 装备表与许多物品相关 项目表与颜色有多方面的关系 关系是这样的 我需要使用以下逻辑创建搜索功能: 如果用户输入“red airmax”,我将查找服装 如果没有这个名字的装备,我会搜索 如果没有这个名字的装备,我会按颜色搜索 所以当我用颜色搜索时,我得到的是红色,但不是airmax, 我也想用这个逻辑在物品中搜索airmax, 如果DB发现产品颜色为红色,请检查产品名称airmax 我正在使用symfony/学说 所以我的带有颜色的sql代码如下 从装备中选择o

我有三张桌子:

  • 装备
  • 项目
  • 颜色
  • 装备表与许多物品相关
    项目表与颜色有多方面的关系

    关系是这样的

    我需要使用以下逻辑创建搜索功能: 如果用户输入“red airmax”,我将查找服装 如果没有这个名字的装备,我会搜索 如果没有这个名字的装备,我会按颜色搜索

    所以当我用颜色搜索时,我得到的是红色,但不是airmax, 我也想用这个逻辑在物品中搜索airmax, 如果DB发现产品颜色为红色,请检查产品名称airmax

    我正在使用symfony/学说 所以我的带有颜色的sql代码如下

    从装备中选择o绑定:装备o
    左连接o.i项
    左连接i.c
    其中c.name像“%red%”
    或类似“%airmax%”的c.name
    按o.id分组
    订购人
    案例
    当i.name像“%airmax%”时,则为1
    其他0
    结束
    
    这是错误的,因为如果我需要按case子句排序,我需要在groupby子句中添加I.id, 但我只需要买衣服

    我们的目标是首先得到在他名字中有关键字的产品

    目前我还不知道如何在物品名称中搜索,只有airmax而不是red,如果有人知道怎么做,也请说明

    数据库示例

    表格:服装
    id:1,名称:“vero moda”
    身份证号码:2,姓名:“第一街”; 表格:项目
    id:1,颜色_id:3,名称:“Vero moda sweatch”
    id:2,颜色\ id:1,名称:“Nike Air Max”
    id:3,颜色\ id:2,名称:“Pepe牛仔裤”
    id:4,颜色_id:2,名称:'Naketano'
    id:5,颜色_id:3,名字:'Dockers By Gerli Stiefel'
    id:6,颜色\ id:2,名称:“牛仔裤”

    表格:项目
    id:1,装备id:1,物品id:1
    id:2,装备id:1,物品id:5
    id:3,装备id:1,物品id:6
    id:4,装备id:2,物品id:2
    id:5,装备id:2,物品id:3
    id:6,装备id:2,物品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
    

    这是相当不清楚的。请显示所有3个表的一些样本数据记录以及预期结果好吗?那里的连接并不反映“多对多”关系。你忘了两个关系表了吗?你错过了两个
    JOIN
    上的
    条件哦,对不起,产品颜色是多个关系,我会编辑一些行的,在那之后它成功了,谢谢