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

问题描述 投票:0回答:1

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

$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. 平滑
  2. 压花
  3. AAR
  4. 被embasid

但相反,它是按照以下INCORRECT顺序对它们进行排序

  1. 平滑
  2. AAR
  3. 压花
  4. 被embasid

知道为什么吗?

是因为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''at第1行

mysql
1个回答
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))."' )";

Update

如果你的$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 ";
© www.soinside.com 2019 - 2024. All rights reserved.