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