重新研究这个问题:php 无限分类的子分类如何再排序

2014-10-05 21:53:57 +08:00
 444683462
第一步。建立无限分类表。
CREATE TABLE IF NOT EXISTS chi_category (
id int(11) NOT NULL AUTO_INCREMENT,
DishCategory_Path varchar(255) DEFAULT NULL,
DishCategory_Sort int(11),
DishCategory_Name varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;



第二步。使用以下查询语句
SELECT id,DishCategory_Path,DishCategory_Name,DishCategory_Sort,concat(DishCategory_Path,'-',id) as fullpath FROM chi_category order by fullpath



第三步。看上面的语句结尾时order by fullpath。这个时候大致排序是正确的。
但是DishCategory_Sort这个字段的值没有排序。
因为order by要求当按照多个列进行排序时,只有第一列相同时才使用第二列。但是第一组fullpath是不可能相同的。所以现在不知道DishCategory_Sort这个字段的值如何排序。

我想实现的正确的情况是先按fullpath排序,然后 子分类例如 (川菜、卤菜)应该在上级分类(吃的)之下进行子分类的排序,如图所示 卤菜应该排在川菜前面才对。
那么现在怎么处理呢?各位大神
2506 次点击
所在节点    问与答
5 条回复
konakona
2014-10-05 22:00:48 +08:00
其实这个排版和重点标注我都没怎么能看懂问题...(羞涩...)
要不,子查询……?
kmvan
2014-10-05 22:05:00 +08:00
参考w p的分类设计,怎么样?
mhycy
2014-10-05 22:06:37 +08:00
下次提问题能不能先把需求说清楚....
alex321
2014-10-05 22:09:07 +08:00
<ul class="sf-menu sf-js-enabled" >
<li class="cat-item">
<?php
$id = 1;
foreach ($sort->result() as $item):
$val = anchor('blog/sort/' . $item->SortID, $item->SortName);
if ($id > ($_id = count(explode('|', $item->SortLevel)))) {
echo str_repeat('</ul></li>', ($id - $_id)) . '<li class="cat-item">' . $val;
} else if ($id < $_id) {
echo '<ul class="children"><li class="cat-item">' . $val;
} else if ($id === $_id) {
echo '</li><li class="cat-item">' . $val;
}
$id = $_id;
?>
<?php endforeach; ?>
</li>
</ul>

好吧,这是我 5 年前随便折腾出来的,基于 CI。业余人士,各位见笑。。
444683462
2014-10-05 22:43:47 +08:00
@mhycy 主要是不知道怎么贴图

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/137183

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX