Я настраиваю функцию геолокации, в которой перечислены все страны в порядке имени. Однако на большинстве веб-сайтов он настроен там, где популярные страны (такие как США, Великобритания, Канада, Австралия) находятся в начале списка (показаны сначала, а не в их назначенных местах). Можно ли достичь этого, используя тот же самый запрос MySQL, который я уже запускаю, чтобы выбрать их?
SELECT * FROM `global_flags` ORDER BY `country`
Есть ли где-то лучшая альтернатива? Возможно, что-то, что может реорганизовать результаты после того, как база данных уже запрошена? Я не хочу исключать эти результаты, а затем вручную вводить их в начале, потому что это потеряло бы больше места в файле.
Используйте 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;
Если заказ не может быть вычислен из самого столбца (и в вашем случае я не думаю, что вы можете), вам нужно добавить другой столбец в свою таблицу (или добавить его через представление), чтобы укажите порядок сортировки.
Например, вы можете иметь столбец приоритета типа int. Для большинства строк он пуст, и для тех, кого вы хотите спереди, это может быть 1. Скажите, что вы хотите, чтобы США и Великобритания были вашими первыми строками, а в алфавитном порядке для остальных:
SELECT * FROM global_flags ORDER BY priority DESC, country
переместит пункты с более высоким приоритетом в начало вашего результирующего набора. Элементы с таким же классом приоритетов будут отсортированы в алфавитном порядке.
РЕДАКТИРОВАТЬ: Мой подход имеет отношение к тому, что вы добавляете данные пользовательского интерфейса в данные. Вы всегда можете отделить приоритет - объект пользовательского интерфейса - в свою собственную таблицу и либо INNER JOIN
, либо создать представление. Но, возможно, ответ VeeArr является лучшим: он не загрязняет ваши данные с проблемами пользовательского интерфейса.
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