我有一张这样的表:
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”进行排序? 这只是一个美化问题,它不需要做多维数组或其他东西,因为我可以在标签上加上它们的类型,然后根据类型改变它们的外观。但我需要以正确的顺序对查询进行讨论。
P.D:对不起我的英文:S
答案 0 :(得分: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));
}
});
});
上查看
<强> UPD 强>
如果你想让它与非js客户端一起使用,你可以在php的后端重新排序,但是解决方案不会那么漂亮:D
答案 1 :(得分:0)
我终于疯了,但它确实有效,就像这样:
select first type
foreach first type
__select second type where id = first type
__foreach second type
答案 2 :(得分: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;