2013-03-18 65 views
3

我有一个表是这样的:订货MySQL的结果顺从父/子

ID NAME      TYPE  PARENT 
1 Letters of Jane Austen book  0 
2 Chapter 1    chapter 1 
3 Chapter 2    chapter 1 
4 Chapter 3    chapter 1 
5 Title 1     title 2 
6 Title 2     title 2 

我想创建一个有序的形式是这样的:

[]Letters of Jane Austen 
    []Chapter 1 
    []Title 1 
    []Title 2 
    []Chapter 2 
    []Chapter 3 
[]Another book... 

在数据库中有很多书,不只是一个。

有没有办法用这种方法对查询“SELECT”进行排序? 这只是一个整容问题,它不需要做一个多维数组或其他东西,因为我可以在标签上键入它们的类型,然后根据类型更改它们的外观。但我需要以正确的顺序提出查询。

Pd积:对不起,我的英语:S

+1

[?你尝试过什么(http://www.whathaveyoutried.com/)参见[问咨询】(http://stackoverflow.com/questions/ask请客户。 – 2013-03-18 12:04:32

+0

我试图用php + while或if或foreach来完成它,但是我还没有完成它的工作。但我不是SQL专家,我认为带来有序查询会更容易。 – 2013-03-18 12:12:09

+0

我不是mysql的专家,但如果它是SQL服务器我会在存储过程中使用游标来执行此操作。 – Star 2013-03-18 12:20:16

回答

2

不要认为这对数据库是个好主意。查询会很难。 Imo更好 - 您可以选择所有书籍,按照顺序将其写入页面,然后使用js重新排序。

的Html可能是几分:

<div id="books"> 
    <div id="book_1" class="book" parent="0">Letters of Jane Austen</div> 
    <div id="book_2" class="book" parent="1">Chapter 1</div> 
    <div id="book_3" class="book" parent="1">Chapter 2</div> 
    <div id="book_4" class="book" parent="1">Chapter 3</div> 
    <div id="book_5" class="book" parent="2">Title 1</div> 
    <div id="book_6" class="book" parent="2">Title 2</div> 
</div> 

所以JS做这个层次:

$(function() { 
    $('#books .book').each(function() { 
     var p = $(this).attr("parent"); 
     if ($('#book_' + p).length) { 
      $(this).appendTo($('#book_' + p)); 
     } 
    }); 
}); 

JSFiddle

检查它UPD

而且你可以重新排序它在后端用PHP,如果你想它的权利与非JS客户合作,但解决方案将不会是美丽的:d

0

我终于疯了,但它的工作原理,是这样的:

select first type 
foreach first type 
__select second type where id = first type 
__foreach second type 
0

这种类型的表使用所谓的邻接表模型。下面的查询会为你工作:

SELECT 
    b.`id`, 
    b.`name`, 
    b.`type`, 
    b.`parent` 
FROM `books` b 
LEFT JOIN `books` b2 ON b.`parent` = b2.`id` 
ORDER BY 
    CASE 
     WHEN b.`parent` = 0 
     THEN b.`id` 
     ELSE b.`parent` 
    END, 
    b.parent;