我喜欢为关联选择使用 self 解释的名称,有时甚至必须避免重复,所以我经常使用 AS 关键字。但这给我带来了一些左连接的麻烦。
这个有效:
$sql = "SELECT *,
projects.id as projects_id
FROM projects";
$sql .= " LEFT JOIN".
" (SELECT
projectfiles.id as projectfiles_id,
projectfiles.fileID as projectfiles_fileID,
projectfiles.projectID as projectfiles_projectID
FROM projectfiles
) AS projectfiles".
" ON projects.id = projectfiles_projectID";
但是现在我得到的是来自projects
的无用数据,因为它还获取了字段userID
和name
,而我并没有这样做不需要。它还会获取 id 两次。
所以我试着把它改成;
$sql = "SELECT
projects.id as projects_id
FROM projects";
随着上线成为
" ON projects_id = projectfiles_projectID";
但这给出了错误 Unknown column projects_id
所以我试过了
" ON projects.projects_id = projectfiles_projectID";
但是还是一样的错误
然后我开始试验,并尝试(作为测试)
$sql = "SELECT id,name,userID FROM projects";
$sql .= " LEFT JOIN".
" (SELECT
projectfiles.id as projectfiles_id,
projectfiles.fileID as projectfiles_fileID,
projectfiles.projectID as projectfiles_projectID
FROM projectfiles
) AS projectfiles".
" ON projects.id = projectfiles_projectID";
令我惊讶的是,LEFT JOIN 似乎根本没有接受任何东西。
代码:
$sql = "SELECT id,name,userID FROM projects";
$sql .= " LEFT JOIN".
" (SELECT
projectfiles.id as projectfiles_id,
projectfiles.fileID as projectfiles_fileID,
projectfiles.projectID as projectfiles_projectID
FROM projectfiles
) AS projectfiles".
" ON projects.id = projectfiles_projectID";
$res = mysql_query($sql);
if(!$res) die(mysql_error());
if(mysql_num_rows($res) > 0)
{
$rownum = 0;
while($row = mysql_fetch_assoc($res))
{
print_r($row);
echo "<br/><br/>";
$rownum++;
}
}
输出:
这很奇怪,因为在 projects
中只有一行,但在 projectfiles
中有 3 行具有该 projectID...我做错了什么?
最佳答案
仅从 projectfiles
表中选择:
$sql = "SELECT projectfiles.*,
projects.id as projects_id
FROM projects";
// rest of the code is the same
更新
$sql = "SELECT projectfiles.* FROM projects";
// rest of the code is the same
关于php - MySQL left join 不使用 AS 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10945794/