Вывод конкретных результатов на фронт с использованием одного запроса MySQL

0

Я настраиваю функцию геолокации, в которой перечислены все страны в порядке имени. Однако на большинстве веб-сайтов он настроен там, где популярные страны (такие как США, Великобритания, Канада, Австралия) находятся в начале списка (показаны сначала, а не в их назначенных местах). Можно ли достичь этого, используя тот же самый запрос MySQL, который я уже запускаю, чтобы выбрать их?

SELECT * FROM `global_flags` ORDER BY `country`

Есть ли где-то лучшая альтернатива? Возможно, что-то, что может реорганизовать результаты после того, как база данных уже запрошена? Я не хочу исключать эти результаты, а затем вручную вводить их в начале, потому что это потеряло бы больше места в файле.

Теги:
order

2 ответа

9
Лучший ответ

Используйте CASE выражение в предложении ORDER BY и присвойте определенные значения тем странам, которые вы хотите отобразить в первую очередь.

например.

SELECT * FROM global_flags
  ORDER BY (CASE WHEN country="United States" THEN 0 WHEN country="United Kingdom" THEN 1 ELSE 2 END), country;
  • 0
    Да, это так же, как моя приоритетная идея, за исключением того, что пользовательский порядок остается красивым и отделенным от данных. Кто-нибудь есть идеи относительно того, что может работать лучше?
  • 0
    Ну, поскольку добавление дополнительного столбца для таблицы из 256 строк выглядит как добавление слишком большого количества данных, я пошел с этим: SELECT * FROM global_flags ORDER BY (CASE WHEN country = 'Australia' THEN 1 WHEN country = 'Canada' THEN 1 WHEN country = 'United Kingdom' THEN 1 WHEN country = 'United States' THEN 1 ELSE 2 END), country
Показать ещё 2 комментария
2

Если заказ не может быть вычислен из самого столбца (и в вашем случае я не думаю, что вы можете), вам нужно добавить другой столбец в свою таблицу (или добавить его через представление), чтобы укажите порядок сортировки.

Например, вы можете иметь столбец приоритета типа int. Для большинства строк он пуст, и для тех, кого вы хотите спереди, это может быть 1. Скажите, что вы хотите, чтобы США и Великобритания были вашими первыми строками, а в алфавитном порядке для остальных:

SELECT * FROM global_flags ORDER BY priority DESC, country

переместит пункты с более высоким приоритетом в начало вашего результирующего набора. Элементы с таким же классом приоритетов будут отсортированы в алфавитном порядке.

РЕДАКТИРОВАТЬ: Мой подход имеет отношение к тому, что вы добавляете данные пользовательского интерфейса в данные. Вы всегда можете отделить приоритет - объект пользовательского интерфейса - в свою собственную таблицу и либо INNER JOIN, либо создать представление. Но, возможно, ответ VeeArr является лучшим: он не загрязняет ваши данные с проблемами пользовательского интерфейса.

Ещё вопросы

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