Mi piace usare i nomi esplicativi per le selezioni associative e talvolta è anche obbligatorio evitare i duplicati, quindi uso la parola chiave AS molto. Ma mi sta dando dei problemi con i join di sinistra.MySQL left join che non funziona con la parola chiave AS
Questo funziona:
$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";
Comunque ora io alla fine con dati inutili da projects
, perché riprende anche i campi userID
e name
, che non ho bisogno. Raccoglie anche l'ID due volte.
Così ho provato a cambiarlo;
$sql = "SELECT
projects.id as projects_id
FROM projects";
con la linea sul diventare
" ON projects_id = projectfiles_projectID";
Ma che ha dato l'errore Unknown column projects_id
Così ho provato
" ON projects.projects_id = projectfiles_projectID";
Ma ancora
ho lo stesso errore poi ha iniziato a sperimentare, e ha cercato (come 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";
e con mia sorpresa, il LEFT JOIN non sembrava raccogliere nulla.
Codice:
$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++;
}
}
uscita:
che è strano perché c'è solo una riga in projects
ma 3 in projectfiles
con quella ProjectID ... cosa faccio di sbagliato ?
Uso istanza del nome di colonna in condizione ON e durante la selezione anche, darà tu correggi la soluzione. Non c'è bisogno di complicare usando AS. Mostra alcuni dati campione e richiesti o/p. –
Qual è il tuo output previsto? –
Vuoi un singolo record con la tabella Progetti, quindi usa DISTINCT. –