У меня есть следующая переменная и запрос. По какой-то причине он сортирует результаты в неправильном порядке.
$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 else 1 end, FIELD (tag, "SMOOTH" в строка 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 ";
$fieldlist
.. смотрите мое обновление
"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, 'SMOOTH','EMBOSSED','AAR','EMBOSSED AAR' ) "
$fieldlist
не влияет на порядок использованияCase
. Он поместит любой элемент, который находится в списке полей, перед любым другим элементом, вот и все.