2013-07-19 3 views
4

Мне нравится какая-то помощь, которая заставила меня задуматься на два дня. Мне нужно retirieve данных из базы данных и заказать его по column1, когда оно не пусто, а затем остальная части результата от column2Mysql закажите по столбцу, если не пусто, а затем закажите другой столбец

column1  column2 
1   11 
2   12 
3   13 
      14 
      15 
      16 

Требуемого результата

1,2,3,14,15,16 

Я попытался многочисленные подходы моя последняя неудачная попытка быть

$SQL = "SELECT * FROM table ORDER BY COALESCE(column1,column2) DESC";

и

`$SQL = "SELECT * FROM table ORDER BY COALESCE(column1,column2) ASC";

Мой выше SQL возвращает NULL значения column1 выше COLUMN2

+0

ли пустые столбцы пустыми, как в пустой строке или нуль? –

+0

Ожидаете ли вы одну или две колонки в обратном? – amaster

+0

Мне нужны все столбцы, но ORDER соответственно. Значение NULL –

ответ

1

coalesce() будет работать только тогда, когда "пустое" значение в column1 фактически NULL. Пустые строки не будут запускать операцию coalesce().

Помимо этого, ваш запрос НЕ будет работать. Вы не можете сделать select * с двумя столбцами и каким-то волшебным образом получить один столбец в результате. Для этого вам потребуется UNION запрос:

(SELECT column1 AS col FROM yourtable) 

UNION ALL 

(SELECT column2 AS col FROM yourtable) 
ORDER BY col 
+0

Спасибо, мне нужно выбрать все столбцы и вернуть их, но ORDERED соответственно. Этот оператор select будет возвращать только 2 столбца, не так ли? –

+0

это вернет только один столбец. – amaster

0

Вы должны быть в состоянии использовать CASE так:

SELECT * 
FROM table 
ORDER BY 
CASE WHEN LENGTH(column1) IS >0 THEN column1 
ELSE column2 END 
ASC 

http://dev.mysql.com/doc/refman/5.0/en/case.html

+1

Это не удалось запустить –

0

Если вы хотите 1 колонку, вы можете попробовать комбинацию от NULLIF и COALESCE, которые должны учитывать как пустые, так и нулевые значения

SELECT COALESCE(NULLIF(column1, ''), column2) AS COL 
FROM table 

SQLFiddle Demo

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

SELECT GROUP_CONCAT(COALESCE(NULLIF(column1, ''), column2)) AS col 
FROM table 

SQLFiddle Demo2

+0

Спасибо, но мне нужно, чтобы ВСЕ столбцы были выбраны, а просто заказаны соответственно. Это позволит выбирать и извлекать только один или два столбца. У меня есть 20 столбцов в этой таблице. –

0

Старый вопрос, но это решение работает для меня:

$SQL = "SELECT * FROM table ORDER BY COALESCE(NULLIF(column1, ''), column2)";

Смежные вопросы