2013-03-18 68 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;