【问题标题】:Fetch data from Hierarchical Data in MySQL从 MySQL 中的分层数据中获取数据
【发布时间】:2015-06-12 08:14:39
【问题描述】:

我存储多级类别。表格如下所示:

类别表

+-------------+---------------+--------------------+
| category_id | category_name | parent_category_id |
+-------------+---------------+--------------------+
|           1 | Clothing      | NULL               |
|           2 | Footwear      | NULL               |
|           3 | Men           | 1                  |
|           4 | Women         | 1                  |
|           5 | Shirts        | 3                  |
|           6 | T-Shirts      | 3                  |
|           7 | Jeans         | 3                  |
+-------------+---------------+--------------------+

company_category_mapping 表

+------------+------------+-------------+
| cmp_cat_id | company_id | category_id |
+------------+------------+-------------+
|          1 |          7 |           5 |
|          2 |          7 |           6 |
|          3 |          7 |           7 |
+------------+------------+-------------+

我想从关于 company_id 的类别表中获取所有类别、子类别、子子类别。我很困惑如何做到这一点。我可以为商店公司类别创建一个新表吗?

我想在下拉列表中显示输出。 我有三个下拉菜单,一个是主类别下拉菜单,第二个是子类别下拉菜单,第三个是子子类别下拉菜单。下拉是明智的填充公司,即不同的公司有不同的类别。

输出显示画面。

对不起我的英语。

谢谢你帮助我。

【问题讨论】:

  • 你尝试过什么吗??
  • 你能输出你期望的输出吗?使用ozh.github.io/ascii-tables
  • 为什么不创建三个循环。首先将显示所有主要类别,其中父类别为 null 并且给出了 companyid。第二个循环将取决于第一个循环 categoryids 的结果。
  • StackOverflow 不是您可以发布代码并请人们为您编写代码的地方。您必须尝试一些事情,并展示您遇到的问题。

标签: php mysql codeigniter


【解决方案1】:

试试这个代码。

  SELECT c1.`category_name` as `category` , c2.`category_name` as `sub-category`, c3.`category_name` as `sub-sub-category` FROM `categories` as c1
    LEFT JOIN `categories` as c2 ON c1.`category_id`=c2.`parent_category_id`
    LEFT JOIN `categories` as c3 ON c2.`category_id`=c3.`parent_category_id`
    where c1.`parent_category_id` IS NULL

关于 company_id

SELECT cm.`company_id`, c1.`category_name` as `category` , c2.`category_name` as `sub-category`, c3.`category_name` as `sub-sub-category` FROM `categories` as c1
LEFT JOIN `categories` as c2 ON c1.`category_id`=c2.`parent_category_id`
LEFT JOIN `categories` as c3 ON c2.`category_id`=c3.`parent_category_id`
INNER JOIN `company_category_mapping` as cm ON cm.`category_id`=c3.`category_id`
    where c1.`parent_category_id` IS NULL

如果您需要获取特定 company_id 的数据。

例如:company_id =7

SELECT cm.`company_id`, c1.`category_name` as `category` , c2.`category_name` as `sub-category`, c3.`category_name` as `sub-sub-category` FROM `categories` as c1
    LEFT JOIN `categories` as c2 ON c1.`category_id`=c2.`parent_category_id`
    LEFT JOIN `categories` as c3 ON c2.`category_id`=c3.`parent_category_id`
    INNER JOIN `company_category_mapping` as cm ON cm.`category_id`=c3.`category_id` AND cm.`company_id`=7
        where c1.`parent_category_id` IS NULL

【讨论】:

  • 感谢您的回复。但我想显示关于 company_id 的类别。
  • 非常感谢你。它对我有用。 @KTAnj。此代码中的一项更改是 parent_category_name 应该是 parent_category_id
  • @KRISHNA 我已经更新了代码。如果有效,标记为正确
【解决方案2】:

试试这个代码

我正在使用 mysqli 来避免问题和黑客攻击

$results = $mysqli->query( "SQL
SELECT *
FROM `categories` as c1
LEFT JOIN `categories` as c2 ON c1.`category_id`=c2.`parent_category_name`
LEFT JOIN `categories` as c3 ON c2.`category_id`=c3.`parent_category_name`
where c1.`parent_category_name` IS NULL");echo 'Results is: ' . $result;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2017-12-07
    • 1970-01-01
    相关资源
    最近更新 更多