我有以下变量和查询。出于某种原因,它正在以错误的顺序对结果进行排序。
$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));
订单支持
但相反,它会按照以下 INCORRECT 顺序对它们进行排序
知道为什么吗?
是因为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行
答案 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 ";