在我的MySQL数据库,我有两个表,一个项目,一个用于类别:MySQL的:选择类别和在一条语句(可选)子类别的项目
的项目表看起来是像这样:
id | project_title | category_id
---|----------------------|------------
1 | My Book Project | 101
2 | My Comic Project | 102
3 | My Magazine Project | 104
然后我有类别。这些可以具有被存储在同一表中的父类别:
id | category_title | parent_id
---|--------------------|----------
101 | Books | 0
102 | Comics | 101
103 | DVDs | 0
104 | Magazines | 101
我喜欢获取所有与根据类别和(可选)子类别的项目(如果提供parent_id
)。如果该类别没有子类别,则子类别应该是“ - ”或“none”。
现在我知道我能得到所有这些值与几个语句:
首先声明:获取与指示类别的项目(可以是主类别或子类别,为此我取也类别的parent_id
):)
SELECT
p.project_title,
c.category_title,
c.parent_id as cat_parent_id
FROM
projects p,
categories c
WHERE
p.category_id = c.id
第二条语句(S:在那之后,我可以在一个循环中获取一个项目的可能的子类,或者给发现类别作为主要类别,如用PHP:
<?php
foreach($rows as $project) {
if ($project['cat_parent_id'] > 0) {
$project['sub_category'] = $project['category_title'];
// query main-category here
}
else {
$project['main_category'] = $project['category_title'];
$project['sub_category'] = 'none';
}
// do things with this project ...
}
?>
问题是,我会找到的每个项目中的另一个查询,这是不是很好。我认为应该有办法在一个语句中获取所有必需的值。我发现SO上的this question几乎相同,但在我的情况下,子类别是obtional。
正如John Cleese所说:有人能给我一个推动力吗?
我不明白什么是PARENT_ID!?!? – Strawberry 2014-11-20 16:50:25
parent_id是同一个表中父类别的标识。但并非所有类别都有子类别。在该项目中,所选类别(主或子)的ID被保存。我想得到两个值,或者 - 如果没有指定子类别 - 短划线(或“无”) – uruk 2014-11-20 16:53:42
好的。请注意,按照惯例,NULL通常用于识别孤儿。 – Strawberry 2014-11-20 16:55:47