mysql结果使用set和case错误地排序

时间:2018-03-01 15:09:31

标签: mysql

我有以下变量和查询。出于某种原因,它正在以错误的顺序对结果进行排序。

$fieldlist = 'SMOOTH,EMBOSSED,AAR,EMBOSSED AAR';

$strap_query = $db1q->query("
SELECT id,name,tag,size,break,footage,coils_per_skid,core_size,grade,color,cost 
FROM Plastic_Strapping 
WHERE subcat=$subcat AND visibility='1' 
ORDER BY case when tag in ('$fieldlist') then 0 else 1 end, FIELD(tag,'$fieldlist'), sort_order ASC") 
or die ('Unable to execute query. '. mysqli_error($db1q));

订单支持

  1. SMOOTH
  2. 压花
  3. AAR
  4. EMBOSSED AAR
  5. 但相反,它会按照以下 INCORRECT 顺序对它们进行排序

    1. SMOOTH
    2. AAR
    3. 压花
    4. EMBOSSED AAR
    5. 知道为什么吗?

      是因为EMBOSSED AAR包含EMBOSSED吗?所以把它放在AAR之后?如果是这样,任何想法如何解决?

      修改

      'SMOOTH','EMBOSSED','AAR','EMBOSSED AAR'部分中放置ORDER BY FIELD有效;但是,我仍然希望能够通过变量编辑它。以下不起作用。

      $fieldlist = "'SMOOTH','EMBOSSED','AAR','EMBOSSED AAR'";
      
      $strap_query = $db1q->query("SELECT id,name,tag,size,break,footage,coils_per_skid,core_size,grade,color,cost FROM Plastic_Strapping WHERE subcat=$subcat AND visibility='1' ORDER BY case when tag in ('$fieldlist') then 0 else 1 end, FIELD(tag, $fieldlist), sort_order ASC") or die ('Unable to execute query. '. mysqli_error($db1q));
      

      抛出此错误

        

      无法执行查询。您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册   语法可以使用' SMOOTH',' EMBOSSED',' AAR',' EMBOSSED AAR')然后0   否则1结束,FIELD(标记,' SMOOTH''在第1行

1 个答案:

答案 0 :(得分:1)

试试这个:

$fieldlist = 'SMOOTH,EMBOSSED,AAR,EMBOSSED AAR';

  $query = "SELECT id,name,tag,size,break,footage,coils_per_skid,core_size,grade,
      color,cost  FROM Plastic_Strapping WHERE subcat = $subcat AND visibility='1'
     ORDER BY FIELD( tag, '".implode("','",explode(',',$fieldlist))."' )";

更新

如果您的$fieldlist变量是这样的:

$fieldlist = "'SMOOTH','EMBOSSED','AAR','EMBOSSED AAR'";

您的查询将是这样的:

$query = "SELECT id,name,tag,size,break,footage,coils_per_skid,core_size,grade,
           color,cost 
           FROM Plastic_Strapping WHERE subcat = $subcat AND visibility = '1' 
           ORDER BY case when tag in ($fieldlist) then 0 else 1 end, 
                    FIELD(tag, $fieldlist), sort_order ASC ";