Извлекать строки из базы данных в определенном порядке (не используя ORDER BY) - PullRequest
2 голосов
/ 20 декабря 2011

По сути, у меня есть список торговцев 18,36,90. Я хочу потянуть все ряды с этими торговцами.

В первом случае я хочу потянуть ряды с торговцами в этом порядке 18,36,90. Следующий оператор MYSQL вытягивает их в правильном порядке, потому что по совпадению товар или в порядке возрастания:

SELECT * FROM tblMerchants WHERE merchantid=18 OR merchantid=36 OR merchantid=90

Что если я захочу потянуть ряды с торговцами в другом порядке, например, 36,90,18, который не будет восходящим или нисходящим? Спасибо!

Ответы [ 3 ]

3 голосов
/ 20 декабря 2011

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

Для ваших целей здесьВы можете жестко закодировать желаемый заказ с помощью оператора CASE.

SELECT *
    FROM tblMerchants
    WHERE merchantid IN (18, 36, 90)
    ORDER BY CASE WHEN merchantid=36 THEN 1
                  WHEN merchantid=90 THEN 2
                  WHEN merchantid=18 THEN 3
                  ELSE 4
             END
0 голосов
/ 20 декабря 2011

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

SELECT *, CASE
      WHEN merchantid = 36 THEN 1
      WHEN merchantid = 90 THEN 2
      WHEN merchantid = 18 THEN 3
    END AS myorder 
  FROM tblMerchants WHERE last_name IN (18, 36, 90)
  ORDER BY myorder
0 голосов
/ 20 декабря 2011

Если вы хотите, чтобы ваш набор результатов возвращался в другом порядке, чем по умолчанию, тогда вам придется использовать предложение ORDER BY. Вы можете упорядочить по случайному значению, чтобы получить случайный порядок, или вы можете определить свой собственный порядок с помощью «пустого» столбца, в котором вы произвольно назначаете значения, а затем упорядочиваете набор результатов по этому столбцу.

...