Порядок Mysql по определенным значениям идентификатора

Можно ли отсортировать в mysql «order by», используя предопределенный набор значений столбца (ID), например: order by (ID = 1,5,4,3), поэтому я бы получил запись 1, 5, 4, 3 в этом заказать?

ОБНОВЛЕНИЕ: О злоупотреблении mysql 😉 Я должен объяснить, зачем мне это нужно …

Я хочу, чтобы мои записи меняли сортировку случайным образом каждые 5 минут. У меня есть задача cron, чтобы сделать таблицу обновлений, чтобы поместить в нее другой случайный порядок сортировки. Есть только одна проблема! PAGINATION. У меня будет посетитель, который придет на мою страницу, и я дам ему первые 20 результатов. Он будет ждать 6 минут и перейти на страницу 2, и у него будут неправильные результаты, поскольку порядок сортировки уже изменился.

Поэтому я подумал, что если он придет на мой сайт, я поставлю все ID на сеанс, и когда он появится на странице 2, он получит правильные записи, даже если сортировка allready изменилась.

Есть ли другой способ, лучше, сделать это?

Вы можете использовать функцию ORDER BY и FIELD. См. http://lists.mysql.com/mysql/209784

SELECT * FROM table ORDER BY FIELD(ID,1,5,4,3) 

Он использует функцию Field () , которая «Возвращает индекс (позицию) str в str1, str2, str3, … list. Возвращает 0, если str не найден» в соответствии с документацией. Таким образом, вы сортируете результирующий набор по возвращаемому значению этой функции, который является индексом значения поля в данном наборе.

Вы должны иметь возможность использовать CASE для этого:

 ORDER BY CASE id WHEN 1 THEN 1 WHEN 5 THEN 2 WHEN 4 THEN 3 WHEN 3 THEN 4 ELSE 5 END 

В официальной документации для mysql о ORDER BY кто-то опубликовал, что вы можете использовать FIELD для этого вопроса, например:

 SELECT * FROM table ORDER BY FIELD(id,1,5,4,3) 

Это непроверенный код, который теоретически должен работать.

Есть еще один способ решить эту проблему. Добавьте отдельную таблицу, примерно такую:

 CREATE TABLE `new_order` ( `my_order` BIGINT(20) UNSIGNED NOT NULL, `my_number` BIGINT(20) NOT NULL, PRIMARY KEY (`my_order`), UNIQUE KEY `my_number` (`my_number`) ) ENGINE=INNODB; 

Эта таблица теперь будет использоваться для определения вашего собственного механизма заказа.

Добавьте свои значения:

 my_order | my_number ---------+---------- 1 | 1 2 | 5 3 | 4 4 | 3 

… а затем измените ваш оператор SQL, присоединившись к этой новой таблице.

 SELECT * FROM your_table AS T1 INNER JOIN new_order AS T2 on T1.id = T2.my_number WHERE ....whatever... ORDER BY T2.my_order; 

Это решение немного сложнее, чем другие решения, но при этом вам не нужно менять SELECT состояние при изменении ваших критериев заказа – просто измените данные в таблице заказов.

SELECT * FROM table ORDER BY id = ‘8’ DESC, id = ‘5’ DESC, id = ‘4’ DESC, id = ‘3’ DESC

Например, если у меня было 10 реестров, таким образом сначала появятся идентификаторы 1, 5, 4 и 3, затем появятся остальные реестры.

Нормальная выставка 1 2 3 4 5 6 7 8 9 10

Таким образом

8 5 4 3 1 2 6 7 9 10

если у вас есть один идентификатор заказа, используйте это

select id, name из продуктов по каждому случаю, когда id = 5, затем -1 else id end

если у вас есть несколько, то используйте это

select id, name from products order case, когда id в (30,20,10), тогда -1 id id end, id

  • Почему quicksort более популярен, чем сортировка radix?
  • Порядок LINQ по нулевому столбцу, где порядок возрастает, а null должны быть последними
  • MySQL: Сортировка значений GROUP_CONCAT
  • Сортировка ArrayList пользовательских объектов по свойству
  • Быстрая сортировка Vs Merge Sort
  • Когда используется каждый алгоритм сортировки?
  • Как заказать список файлов по имени файла с номером?
  • Java, найти пересечение двух массивов
  • Сортировка двухмерного массива на основе одного столбца
  • Быстрая производительность: сортировка массивов
  • Для чего нужен пузырь?
  • Interesting Posts

    Octave / Matlab: удлинить вектор, чтобы он повторялся?

    Настройка Notepad ++ найти стиль результатов

    Как вернуть Google поиск Google на английский язык после экспериментов с новой функцией Chrome, которая обнаруживает, когда я меняю страну?

    Сколько термопасты должно применяться к ЦП?

    Следует ли заменить использование addJSONData jqGrid на использование setGridParam () и trigger (‘reloadGrid’)?

    LESS CSS: злоупотребление & Operator при вложенности?

    Играет много разных видео на iphone, используя AVPlayer

    Как объединить 2 или более файлов .WAV вместе программно?

    Как я могу получить нумерацию страниц Word для начала на третьей странице, чтобы она отображалась в TOC как страница 1

    Как попасть на экран блокировки Windows 8 на Microsoft Surface?

    Предоставление доступа к местам Firebase группе пользователей

    При правильном использовании Task.Run и при простом асинхронном ожидании

    Пакетное удаление новой строки в txt-файлах в командной строке Windows (cmd)

    Pig Latin: загрузка нескольких файлов из диапазона дат (часть структуры каталогов)

    OpenSSL отсутствует во время ./configure. Как исправить?

    Давайте будем гением компьютера.