Просто заданный вопрос, довольно подобный этому...
В настоящее время я делаю очень простой 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.
Я предполагаю, что решение может иметь некоторую функцию замены, но я не могу найти функцию, которая делает то, что я после.
SELECT *
FROM tablename
WHERE visible=1
ORDER BY
case when position in('', '0') then 1 else 0 end,
position ASC,
id DESC
Вы можете попробовать заявление о случаях , как это:
SELECT *
FROM tablename
WHERE visible = 1
ORDER BY CASE position WHEN '' THEN '9999' ELSE position END CASE ASC,
ID DESC
Вы можете просмотреть документ 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
Я думаю, что ваша характеристика Грааля как «багги» немного суровая. Хотя вы сталкиваетесь с ошибками при использовании 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 >
. Если позиция не является целым типом, я бы посоветовал вам изменить ее. Главная причина в том, что последовательности, даже если они похожи на числа, не сортируются как числа.