【问题标题】:join query in same table with condition在同一个表中加入查询条件
【发布时间】:2011-05-23 09:32:28
【问题描述】:

我在同一张表中同时插入了类别和子类别。

id , name , mainCat ,

这是类别的名称。如果用户添加子类别,那么我会将父类别添加到 maincat 并将子类别添加到名称。

但是当进行排序时,我会按类别进行排序。

谁能推荐我最好的查询

【问题讨论】:

    标签: mysql join self-join


    【解决方案1】:

    只要您只有两个级别的类别,那么使用自联接的如下查询就足够了。但是,如果您有许多级别(即层次结构),那么问题就会变得更加困难。请参阅http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ 了解更多信息。

    SELECT p.Name, s.Name
    FROM Categories s
    LEFT JOIN Categories p ON s.mainCat = p.ID
    ORDER BY p.Name, s.Name;
    

    【讨论】:

    • 也许您应该发布更多关于您正在尝试的内容和预期结果的详细信息。
    • 我需要订购我的结果。正如我所说,我在同一字段上有我的子类别和类别。所以如果我有一个类别(运动)和子类别作为球。我希望它在我显示的运动之后列出或排序。即首先是运动,然后是运动->球
    【解决方案2】:

    我尝试了很多查询,但最后我用 php 做到了

    $category = mysql_query("SELECT * FROM category WHERE mainCat = '' ORDER BY `name` ASC"); 而($data = mysql_fetch_array($category)){ $数组[] = $数据; $subCategory = mysql_query("SELECT * FROM category WHERE mainCat ='".$data['name']."' ORDER BY `name` ASC"); echo "SELECT * FROM category WHERE mainCat ='".$data['name']."' ORDER BY `name` ASC".'
    '; 而($data2 = mysql_fetch_array($subCategory)){ if($data2['mainCat']!=""){ $array[] = $data2; } } }

    【讨论】:

      【解决方案3】:

      让你试试下面:

      SELECT t1.id, t1.name
      FROM tablename t1
      LEFT JOIN tableName t2
      ON t2.name = t1.mainCat
      

      【讨论】:

      • 对不起朋友 :) 此查询仅适用于少数类别而不适用于所有类别。
      • 哪里失败了??你能用实时数据描述一下吗
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      相关资源
      最近更新 更多