MySQL Orderby число, Пустые строки (или 0) В последний раз

Просто заданный вопрос, довольно подобный этому...

В настоящее время я делаю очень простой OrderBy в своем операторе.

SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC

Проблема с этим состоит в том, что записи пустой строки для 'положения' рассматривают как 0. Поэтому все записи с позицией пустой строки появляются перед теми, которые имеют 1,2,3,4. например:

'', '', '', 1, 2, 3, 4

или:

0, 0, 0, 1, 2, 3, 4

Есть ли способ достигнуть следующего упорядочивания:

1, 2, 3, 4, '', '', ''.

или:

1, 2, 3, 4, 0, 0, 0.

Я предполагаю, что решение может иметь некоторую функцию замены, но я не могу найти функцию, которая делает то, что я после.

7
задан double-beep 2 February 2019 в 12:58
поделиться

4 ответа

SELECT * 
FROM tablename 
WHERE visible=1 
ORDER BY 
    case when position in('', '0') then 1 else 0 end,
    position ASC, 
    id DESC
15
ответ дан 6 December 2019 в 11:49
поделиться

Вы можете попробовать заявление о случаях , как это:

SELECT *
FROM tablename
WHERE visible = 1
ORDER BY CASE position WHEN '' THEN '9999' ELSE position END CASE ASC,
    ID DESC
1
ответ дан 6 December 2019 в 11:49
поделиться

Вы можете просмотреть документ java по адресу http://bouncycastle.org/docs/docs1.6/index.html

Вы можете скачать примеры с этой страницы: http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0764596330, descCd-DOWNLOAD.html

-121--2797465-

Хотя это очень полезная вещь иметь, вы не можете has_many:through has_many:through отношения. Это ограничение механизма соединения.

Альтернативой является либо использование умного подвыбора, либо в данном случае подвыбора, либо преднамеренная денормализация таблиц, достаточная для уменьшения глубины соединения.

Например, поскольку Бизнес определяется в контексте Поставщика, это означает, что любые элементы Предложения также косвенно присваиваются Поставщику. Создание прямой связи между Заявкой и Поставщиком сделает запрос предложений напрямую простым.

-121--3003457-

можно попытаться объединить два подзапроса, в которых один выбирает id > 0 и не пустой, а другой выбирает пустой и только 0

0
ответ дан 6 December 2019 в 11:49
поделиться

Я думаю, что ваша характеристика Грааля как «багги» немного суровая. Хотя вы сталкиваетесь с ошибками при использовании Grails это часто лежащие в основе рамки (Spring, Hibernate) или плагин, который отвечает, а не Grails.

Также, учитывая, что Hibernate является реализацией JPA, действительно ли имеет смысл говорить, что

я бы предпочел JPA, а не Gorm

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

-121--2831565-

Я думаю, что вы ищете что-то в русле алгоритма кластеризации k-means .

Вы должны иметь возможность найти адекватные реализации на большинстве языков общего назначения.

-121--3950620-

Вы говорите, что позиция содержит пустые записи последовательности... Вы действительно имеете в виду пустые последовательности или NULL ? Если он фактически содержит записи NULL , следует использовать небольшое изменение оператора Орбмана:

SELECT * 
FROM tablename 
WHERE visible=1 
ORDER BY 
    COALESCE(position, ~0)
,   id DESC

COALESCE () возвращает значение первого аргумента, которое равно NOT NULL . ~ 0 - это часть черной магии, которая даст вам максимальное целое значение, поддерживаемое MySQL. (~ делает побитовое отрицание, превращая все 0 бит в 1). Так, в этом случае, если position IS NULL имеет значение true, то возвращается 18446744073709551615 , в противном случае возвращается значение position .

Я также хотел бы отметить, что тип данных столбца position , скорее всего, должен быть некоторого целого типа (см. http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html ). Поскольку вы упоминаете пустые последовательности, я думаю, что вам следует проверить определение таблицы, выполнив команду SHOW CREATE TABLE < tablename > . Если позиция не является целым типом, я бы посоветовал вам изменить ее. Главная причина в том, что последовательности, даже если они похожи на числа, не сортируются как числа.

1
ответ дан 6 December 2019 в 11:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: