【问题标题】:php&mysql find parent category namephp&mysql 查找父类名称
【发布时间】:2013-07-19 14:25:02
【问题描述】:
我有关于内连接、左连接命令的问题。
我的分类表是:
身份证 |家长 |标题
1 | 0 |第一类
2 | 1 |其他类别
我有列表类别,我想在 sql 命令中获取父母类别标题。
我试过了:
SELECT cat.ID, cat.title, cat2.title as parentcatname, cat.parent
FROM categories cat INNER JOIN categories cat2 ON cat2.ID=cat.parent
但它不起作用。
【问题讨论】:
标签:
php
mysql
left-join
inner-join
【解决方案1】:
您必须使用LEFT JOIN 才能提取所有类别,无论它们是否有父类别。 INNER JOIN 过滤掉所有的不匹配。
SELECT c.id, c.title, c.parent, p.title parent_title
FROM categories c LEFT JOIN categories p
ON c.parent = p.id
输出:
|身份证 |标题 |家长 | PARENT_TITLE |
-------------------------------------------------
| 1 |第一类 | 0 | (空) |
| 2 |其他类别 | 1 |第一类 |
这里是SQLFiddle演示
【解决方案2】:
如果您想获取所有父类别,请尝试查询
SELECT cat_id FROM categories WHERE parent=0;
如果你想获取某个类别的父类别
SELECT C.cat_id, P.title FROM categories C LEFT JOIN categories P ON P.parent=C.cat_id;
我没有测试上面的代码,但它应该可以正常工作。
【解决方案3】:
您始终可以通过将 SQL 输入验证器(在线加载)、phpMyAdmin 的 SQL 选项卡或带有 SQL 验证的编辑器来调试您的 SQL。在我看来,您的类别表选择附近有一个小错字。
如果您的 SQL 无法正常工作,请务必将其降低。请注意,JOIN(内、左、右等)用于连接两个或更多表。
SELECT
one.ID, one.title, one.parent, one.title, one.parent, one.title
FROM
categories one
LEFT JOIN
categories two
ON
one.parent = two.ID