I like to use self-explanatory names for associative samples, and sometimes it’s even necessary to avoid duplicates, so I use the AS alot keyword. But this gives me some problems with left joins.
It works:
$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";
However, now I get useless data from projects, because it also captures fields userIDand namethat I don't need. It also raises the identifier twice.
So I tried to change it to;
$sql = "SELECT
projects.id as projects_id
FROM projects";
When the line ON becomes
" ON projects_id = projectfiles_projectID";
But it gave an error Unknown column projects_id
So i tried
" ON projects.projects_id = projectfiles_projectID";
But still the same mistake
Then I started experimenting and tried (as a test)
$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";
And, to my surprise, the LEFT JOIN did not seem to be collecting anything.
the code:
$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++;
}
}
Conclusion:

, projects, 3 projectfiles projectID... ?