Mysql 要使用哪种类型的联接?

Mysql 要使用哪种类型的联接?,mysql,Mysql,我有一个名为PROJECT_CATEGORY的表,它包含两个字段 cat_id和cat_标题 我将cat_id存储在另一个名为PROJECTS的表中,因此: project_category.cat_id = projects.cat_id 使用MySQL运行查询以显示cat\u标题的最佳方式是什么。换句话说,我希望显示表的名称而不是ID号。这是否有效: SELECT * FROM projects INNER JOIN projects ON project_category.cat_id

我有一个名为PROJECT_CATEGORY的表,它包含两个字段

cat_id和cat_标题

我将cat_id存储在另一个名为PROJECTS的表中,因此:

project_category.cat_id = projects.cat_id
使用MySQL运行查询以显示
cat\u标题
的最佳方式是什么。换句话说,我希望显示表的名称而不是ID号。这是否有效:

SELECT * FROM projects INNER JOIN projects ON project_category.cat_id = projects.cat_id
那就叫它:

'.$row['cat_title'].'
有什么想法吗?

如果每个项目都有一个有效的cat\u id并且cat\u id是唯一的,那么内部连接就可以了

如果任何项目的cat_id为空,则需要左联接

如果cat_id不是唯一字段(主键),您可能希望使用子查询将自己限制为每个项目一个结果

SELECT
  projects.cat_id cat_id
FROM
  projects INNER JOIN
  project_category ON project_category.cat_id = projects.cat_id

这应该行。

尽量不要使用SELECT*,而是选择所需的特定字段。此外,如果在查询中使用多个表,请正确地对它们进行别名,以便可以根据需要提取值,而不会遇到歧义问题

无论如何,您可以尝试以下方法:

SELECT       
 project_category.cat_title 
 ,projects.*  
FROM   
 projects   
  LEFT OUTER JOIN     
   project_category
    ON project_category.cat_id = projects.cat_id

你的加入看起来不错。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);

您可以使用
自然连接

SELECT CAT_TITLE
FROM projects
NATURAL JOIN project_category

如果列的类型相同且不为null,则无需将字段放入联接中,这样就可以正常工作。

是的……每个项目也会有它所属的类别类型。要显示cat_标题,我可以使用:'.$row['cat_title']'。我尝试了这一点并得到一个空白输出,无错误在查询分析器(如phpMyAdmin)中运行查询,查看是否得到任何结果。如果没有,您可能出于某种原因没有任何数据,否则您可能在php中错误地读取了字段。这似乎让我的数据被提取,而不是类别。有什么想法吗?你确定每个项目都有一个与之相关的项目类别吗?也许你可以发布你的表模式(desc project,desc project_category是我认为用于MySQL的命令)和一行示例数据。表project_category作为两个字段(cat_id,cat_title),例如:1,我的PROJECTS表上的电子商务我有cat_id,因为那里有关系,因此,我试图显示CAT_标题而不是CAT_id如果您通过phpMyAdmin或MySQL查询运行查询,您是否看到该类别的完整结果?如果是这样,那么在PHP中引用字段的方式可能会有问题。
SELECT CAT_TITLE
FROM projects
NATURAL JOIN project_category