tblProjects
与tblPrCat
的{{1}} - 两个表中的列相关联。
t1_id
与tblCategories
tblPrCat
- 两个表中的列相关联。
一个项目可能有几个类别。
t3_id
我正在尝试使用单个tblProjects
t1_id
t1_name
tblPrCat
t1_id
t3_id
tblCategories
t3_id
t3_name
- 句子来获取项目的值(或10)并获取与每个项目相对应的所有类别的名称。
这可能在单个SELECT
- 句子中为每个项目返回一行但是多个类别吗?
答案 0 :(得分:3)
您可以尝试这样的查询:
SELECT
tblProjects.name AS project,
tblCategories.name AS category
FROM
tblProjects
INNER JOIN tblPrCat USING (t1_id)
INNER JOIN tblCategories USING (t3_id)
WHERE
/* Your search criteria here */
注意:您将看到与每个项目关联的每个类别名称,但如果每个项目有多个类别,您将看到看似重复的项目名称。准备好在你的代码中处理这个问题。
修改强> 我假设(可能错误地)每个项目至少有一个类别。要确保您还看到项目名称为none,请使用以下代码:
SELECT
tblProjects.name AS project,
IFNULL(tblCategories.name, 'No categories!') AS category
FROM
tblProjects
LEFT JOIN tblPrCat USING (t1_id)
LEFT JOIN tblCategories USING (t3_id)
WHERE
/* Your search criteria here */
修改强> 要仅显示每个项目一次,但将类别名称摘要显示为以逗号分隔的列表,请使用以下命令:
SELECT
tblProjects.name AS project,
IFNULL(GROUP_CONCAT(tblCategories.name), 'No categories!') AS category
FROM
tblProjects
LEFT JOIN tblPrCat USING (t1_id)
LEFT JOIN tblCategories USING (t3_id)
WHERE
/* Your search criteria here */
GROUP BY
tblProjects.t1_id
答案 1 :(得分:2)
您可以使用加入:
SELECT p.t1_name, c.name
FROM tblProjects p
LEFT JOIN tblPrCat prc ON (p.t1_id = prc.t1_id)
LEFT JOIN tblCategories c ON (c.t3_id = prc.t3_id)
请注意,这会多次列出项目。即。
Project1 Cat1
Project1 Cat2
Project2 Cat1
或者,如果您只想查看每个项目一次,则可以使用Group Concat:
SELECT p.t1_name, GROUP_CONCAT(c.name)
FROM tblProjects p
LEFT JOIN tblPrCat prc ON (p.t1_id = prc.t1_id)
LEFT JOIN tblCategories c ON (c.t3_id = prc.t3_id)
GROUP BY p.t1_id
将产生:
Project1 Cat1, Cat2
Project2 Cat1
答案 2 :(得分:1)
SELECT * FROM
tblProjects p ,
tblPrCat pc ,
tblCategories c
WHERE
c.t3_id = pc.t3_id
AND
p.t1_id = pc.t1_id
AND
p.t1_id = '1'