2013-10-04 3 views
2

Привет У меня есть структура таблицы, как этоткак писать условия на заказ по п

id name   is_file disp_order parent 
1 PDF Folder 0   2  
2 textpdf1  1   1   1 
3 PPT Folder 0   1  
4 testppt1  1   2   3 
5 testppt2  1   1   3 

мое требование заключается в retrive данные по порядку, т.е. файлы порядок по имени и папки упорядочить по disp_order

Я написал один запрос, но он терпит неудачу, если конкретный родитель имеет более чем 10 детей disp_order также работать в качестве строки не числовой один Myquery:

select id,nae,is_file,disp_order from contents 
where parent_id=3 
order by case 
when is_file=1 then display_text 
when is_file=0 then display_order 
end ASC; 

в моем DB родителю 3 имеет 20 записей папки типа, выбирающий заказ, как этот 1,10,11,12,2,3,4,5,6,

+0

Чувствуется, что ваш disp_order является строка (или символ) – athabaska

ответ

0

первый заказе на DISPLAY_TEXT, как вы хотите, если is_file = 1. Еще вы убедитесь, что строки упорядочены в конце, поставив «zzz» (может быть любая строка, поставить «aaaa», если вы хотите сначала их заказать). Затем также закажите на disp_order.

select id,nae,is_file,disp_order from contents 
where parent_id=3 
order by case 
when is_file=1 then display_text 
when is_file=0 then 'zzz' 
end, disp_order; 

Я предполагал, что это желание, которое вы хотите сделать. В противном случае обеспечить пример вывод пожалуйста :)

+0

поблагодарить у него работает, как и следовало ожидать, у меня есть сомнения по наведению строк рода вещи, если у знать любую ссылку об этом, пожалуйста, поделитесь со мной, что поможет мне – user2590163

+0

ну, вы должны поместить строку «zzz», потому что display_text также является строкой. Ввод случая в предложение order by не является проблемой, если каждый «случай» приводит к тому же типу данных (в данном случае, к строке). – devnomore

+0

Если этот ответ помог вам и/или решил ваш вопрос, пожалуйста, примите ответ. Таким образом, этот вопрос больше не открыт, и мы можем сохранить сайт чистым. – devnomore

0

Чтобы сортировка сделана в целом числе, пожалуйста, попробуй ниже:

select id,nae,is_file,disp_order from contents 
where parent_id=3 
order by case 
when is_file=1 then display_text 
when is_file=0 then display_order * 1 
end ASC; 
+0

Я попробовал это, если он не содержит более 10 папок – user2590163

0

Этих предварительным сортирует все is_file = 0, а затем все is_file = 1 ряд. Однако в каждой группе все файлы будут отсортированы по столбцу name, но папки будут отсортированы по их disp_order.

select 
     c.id, 
     c.`name`, 
     c.is_file, 
     c.disp_order, 
     c.parent 
    from 
     contents c 
    where 
     c.parent=3 
    order by 
     c.is_file, 
     case when is_file = 1 
     then c.`name` else c.display_order end 
Смежные вопросы