MySQL неправильно упорядочивает результаты, используя set FIELD и case

0

У меня есть следующая переменная и запрос. По какой-то причине он сортирует результаты в неправильном порядке.

$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. ВОССТАНОВЛЕННЫЙ ААР

Но вместо этого он сортирует их в следующем порядке INCORRECT

  1. ГЛАДКИЙ; ПЛАВНЫЙ
  2. AAR
  3. тисненая
  4. ВОССТАНОВЛЕННЫЙ ААР

Любая идея почему?

это потому, что 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

  • 0
    try "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' ) "
  • 0
    Ваш запрос возвращает другие теги? Если да, не могли бы вы опубликовать полный результат? Потому что я думаю, что порядок элементов в $fieldlist не влияет на порядок использования Case . Он поместит любой элемент, который находится в списке полей, перед любым другим элементом, вот и все.
Показать ещё 3 комментария
Теги:

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))."' )";

Обновить

Если переменная $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 ";
  • 0
    ошибка: невозможно выполнить запрос. У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '' ',' 'EMBOSSED' ',' 'AAR' ',' 'EMBOSSED AAR' '), sort_order ASC' в строке 1
  • 0
    вы изменили переменную $fieldlist .. смотрите мое обновление
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню