热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何输出这个分层的Mysql结构?-HowtooutputthishierarchicalMysqlStructure?

IgotthefollowingMysqlStructure我得到了以下Mysql结构categoriestab--------------------------layer1

I got the following Mysql Structure

我得到了以下Mysql结构

categories tab
--------------------------
layer1 | layer2 | layer3
--------------------------
echo   | brain  |
echo   |        |
echo   | foo    |
echo   | brain  | diffuse
echo   | brain  | clear
echo   | cheesy | nuts
echo   | cheesy |   

I´ve tried to output the following Structure as a HTML list

我试图将以下结构输出为HTML列表

  • echo

    回声

    • (...) brain

      (...)大脑

    • (...) cheesy

      (...)俗气

    • foo

      FOO

(...) should be a hint for the user that brain and cheesy have also childelements to offer.

(...)应该是一个提示用户,大脑和俗气也有childelements提供。

e.g. When he clicks on brain the following View should be shown:

例如当他点击大脑时,应显示以下视图:

  • echo

    回声

    • brain

      • clear

        明确

      • diffuse

        扩散

    • (...) cheesy

      (...)俗气

    • foo

      FOO

This drive me nuts ... tried so many GROUP/ORDER BY, UNION and CASE variants but I don´t get it -.-

这让我疯了......尝试了这么多的GROUP / ORDER BY,UNION和CASE变种,但是我得不到它 - .-

1 个解决方案

#1


0  

Given the way you're storing the data, you probably can't do this in one SQL query. Or else it would be so brain-meltingly complicated that it's a bad idea to do so. Remember the advice of Brian Kernighan:

鉴于您存储数据的方式,您可能无法在一个SQL查询中执行此操作。否则它会如此复杂,以至于这样做是个坏主意。记住Brian Kernighan的建议:

Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.

调试是首先编写代码的两倍。因此,如果您尽可能巧妙地编写代码,那么根据定义,您不够智能来调试它。

You can do the first query pretty easily:

您可以非常轻松地执行第一个查询:

SELECT layer1, layer2, COUNT(layer3) AS dotdotdot
FROM categories
WHERE layer1 = 'echo'
GROUP BY layer1, layer2

If dotdotdot is non-null, then there's a nonzero number of subcategories in layer 3.

如果dotdotdot为非null,则第3层中的子类别数量为非零。

If the user has highlighted "brain", then as you display the result of the first query in a loop, run one more query:

如果用户突出显示“大脑”,那么当您在循环中显示第一个查询的结果时,再运行一个查询:

SELECT layer3
FROM categories
WHERE layer2 = 'brain'

And that's it. It may seem so dull to run two queries instead of finding some ingenious way of doing it all in one query, but you'd be surprised how frequently a complex problem becomes both simpler and more efficient when you break it down into smaller problems.

就是这样。运行两个查询而不是在一个查询中找到一些巧妙的方法来执行它可能看起来很乏味,但是当您将其分解为更小的问题时,复杂问题变得更简单和更有效的频率会让您感到惊讶。

If you want something more streamlined, check out my presentation Models for Hierarchical Data with SQL and PHP. I show an example of the kind of problem you're trying to implement: selective expansion of a given level in a hierarchy. But I solve the problem by storing the data differently than you are.

如果您想要更精简的内容,请查看我的演示文稿使用SQL和PHP进行分层数据的模型。我展示了您尝试实现的问题类型的示例:在层次结构中选择性扩展给定级别。但我通过以不同的方式存储数据来解决问题。


推荐阅读
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
author-avatar
mobiledu2502886767
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有