Me gusta usar nombres de autoexplicación para selecciones asociativas, y en ocasiones incluso es obligatorio evitar duplicados, así que uso mucho la palabra clave AS. Pero me está dando problemas con las combinaciones de la izquierda.MySQL left join no funciona con la palabra clave AS
Esto funciona:
$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";
Sin embargo, ahora termino con datos inútiles de projects
, ya que también recoge los campos userID
y name
, que no necesito. También está recogiendo la identificación dos veces.
Así que traté de cambiarlo;
$sql = "SELECT
projects.id as projects_id
FROM projects";
con la línea de convertirse en
" ON projects_id = projectfiles_projectID";
Pero que dio el error Unknown column projects_id
Así que traté
" ON projects.projects_id = projectfiles_projectID";
Pero sigue siendo el mismo error
I luego comenzó a experimentar, y trató (como prueba)
$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";
Y para mi sorpresa, la combinación izquierda no parecía para recoger nada en absoluto.
Código:
$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++;
}
}
Salida:
lo cual es raro porque sólo hay una fila de projects
pero 3 en projectfiles
con ese projectId ... ¿qué estoy haciendo mal ?
Uso instancia del nombre de la columna en estado ON y mientras que la selección también, se le dará corriges la solución No necesita complicarse usando AS. Muestre algunos de sus datos de muestra y requiera o/p. –
¿Cuál es su resultado esperado? –
¿Desea un solo registro con la tabla Projects y luego utilice DISTINCT. –