отправить запись в начало запроса MySQL на основе номера записи - PullRequest
0 голосов
/ 06 января 2011

Как мне получить запрос для добавления определенной записи в начало результатов на основе ПК?

У меня есть список классов продуктов на основе первичного ключа отдела. С моим продуктом уже связан класс, но я хочу предоставить пользователю другие классы, доступные только для этого продукта. Я хочу, чтобы его текущий класс был лучшим результатом.

Имеет ли это смысл?

Ответы [ 3 ]

4 голосов
/ 06 января 2011

Это сделает строку 123 первой из результатов:

SELECT ... ORDER BY (key_col = 123) DESC

Если key_col равно 123, результат сравнения равен 1, в противном случае это 0.Если вы ORDER в порядке убывания, 1 идет первым.

0 голосов
/ 06 января 2011

Мой общий подход к такого рода функциям заключается в использовании оператора CASE .. WHEN , который будет работать аналогично ответу @ AndreKR выше, но немного более гибок в том, что он может быть более детализированнымчем просто логическое сравнение.

Это выглядело бы примерно так ( вот так бы выглядело в MS SQL , но из документации видно, что в mySQL это похоже):

SELECT fields
FROM table
ORDER BY
  CASE 
    WHEN val = 123 THEN 0
    WHEN val < 200 THEN 1
    WHEN val < 400 THEN 2
    ELSE 3
  END
asc
0 голосов
/ 06 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...