我有一个名为PROJECT_CATEGORY的表,它包含两个字段
cat_id和cat_title
我将cat_id存储在另一个名为PROJECTS的表中:
project_category.cat_id = projects.cat_id
使用MySQL运行查询以显示cat_title
的最佳方法是什么。换句话说,我想显示名称而不是表格的ID号。这会有用吗?
SELECT * FROM projects INNER JOIN projects ON project_category.cat_id = projects.cat_id
然后叫它:
'.$row['cat_title'].'
有什么想法吗?
答案 0 :(得分:1)
如果每个项目都有一个有效的cat_id且cat_id是唯一的,那么INNER JOIN就可以了。
如果任何项目的cat_id为NULL,则需要LEFT JOIN。
如果cat_id不是唯一字段(主键),您可能希望使用子查询将自己限制为每个项目一个结果。
答案 1 :(得分:1)
尽量不要使用SELECT *,而是选择您需要的特定字段。此外,如果在查询中使用多个表,请对它们进行正确别名,以便您可以根据需要提取值,而不会遇到模糊问题。
无论如何,你可以尝试类似的东西:
SELECT
project_category.cat_title
,projects.*
FROM
projects
LEFT OUTER JOIN
project_category
ON project_category.cat_id = projects.cat_id
答案 2 :(得分:0)
SELECT
projects.cat_id cat_id
FROM
projects INNER JOIN
project_category ON project_category.cat_id = projects.cat_id
答案 3 :(得分:0)
SELECT cat_title
FROM projects
INNER JOIN project_category ON project_category.cat_id = projects.cat_id
这应该有效。
答案 4 :(得分:0)
您的加入看起来不错。 FWIW,我在这种情况下使用USING
子句。它的工作原理相同,但它更清晰简洁:
SELECT * FROM projects INNER JOIN project_category USING (cat_id);
如果您在$row
关联数组中找到列时遇到问题,我会检查列定义的拼写,包括大小写。如果你这样宣布你的表:
CREATE TABLE `Project_Category` (
`Cat_ID` INTEGER NOT NULL,
`Cat_Title` VARCHAR(20) NOT NULL
);
然后结果集可以在数组键中使用该字面拼写和大小写。 PHP数组键区分大小写。
print $row['Cat_Title'];
您可能应该转储$row
数组以查看它的密钥是什么:
print_r($row);
答案 5 :(得分:0)
您可以使用NATURAL JOIN
:
SELECT CAT_TITLE
FROM projects
NATURAL JOIN project_category
如果列是相同的类型而不是null,则不需要将字段放在连接中,它将正常工作。