Hola amigos, necesito ayuda para poder realizar un select que mezcla distintas consultas.
El SELECT es:
Código MySQL:
Ver originalSELECT DISTINCT mercurio.linea.nombre_linea
, mercurio.recorrido.letra_recorrido
FROM mercurio.linea
, mercurio.recorrido
, mercurio.recorrido_has_ciudad, mercurio.ciudad, mercurio.recorrido_has_calle, mercurio.calle, mercurio.recorrido_has_sector,
mercurio.sector
, mercurio.recorrido_has_lugar
, mercurio.lugar
WHERE mercurio.linea.id_linea
= mercurio.recorrido.linea_id_linea
AND mercurio.recorrido.id_recorrido
= mercurio.recorrido_has_ciudad.recorrido_id_recorrido
AND mercurio.recorrido_has_ciudad.ciudad_id_ciudad
= (SELECT mercurio.ciudad.id_ciudad
FROM mercurio.ciudad
WHERE mercurio.ciudad.nombre_ciudad
= 'Hualpén') AND mercurio.recorrido_has_calle.calle_id_calle
= (SELECT mercurio.calle.id_calle
FROM mercurio.calle
WHERE mercurio.calle.nombre_calle
= 'Gibraltar') AND mercurio.recorrido_has_sector.sector_id_sector
= (SELECT mercurio.sector.id_sector
FROM mercurio.sector
WHERE mercurio.sector.nombre_sector
= 'Diego Portales') AND mercurio.recorrido_has_lugar.lugar_id_lugar
= (SELECT mercurio.lugar.id_lugar
FROM mercurio.lugar
WHERE mercurio.lugar.nombre_lugar
= 'ENAP') AND mercurio.linea.nombre_linea
IN ( SELECT DISTINCT mercurio.linea.nombre_linea
FROM mercurio.linea
, mercurio.recorrido
, mercurio.recorrido_has_ciudad
, mercurio.ciudad
, mercurio.recorrido_has_calle
, mercurio.calle
, mercurio.recorrido_has_sector
, mercurio.sector
, mercurio.recorrido_has_lugar
, mercurio.lugar
WHERE mercurio.linea.id_linea
= mercurio.recorrido.linea_id_linea
AND mercurio.recorrido.id_recorrido
= mercurio.recorrido_has_ciudad.recorrido_id_recorrido
AND mercurio.recorrido_has_ciudad.ciudad_id_ciudad
= (SELECT mercurio.ciudad.id_ciudad
FROM mercurio.ciudad
WHERE mercurio.ciudad.nombre_ciudad
= 'Talcahuano') AND mercurio.recorrido_has_calle.calle_id_calle
= (SELECT mercurio.calle.id_calle
FROM mercurio.calle
WHERE mercurio.calle.nombre_calle
= 'Bilbao') AND mercurio.recorrido_has_sector.sector_id_sector
= (SELECT mercurio.sector.id_sector
FROM mercurio.sector
WHERE mercurio.sector.nombre_sector
= 'Cerro la Gloria') AND mercurio.recorrido_has_lugar.lugar_id_lugar
= (SELECT mercurio.lugar.id_lugar
FROM mercurio.lugar
WHERE mercurio.lugar.nombre_lugar
= 'ENAP') )
Lo anterior funciona sin problemas y retorna los valores que necesito cuando lo hago trabajar en el "PHPMYADMIN", como pueden ver aquí:
El problema se presenta a la hora de "migrar" esta consulta al PHP. En el caso de (mysql_fetch_array) que nos sirve para obtener las variables en muchos de los casos
no me responde o retorna nada, aquí el código:
Código PHP:
$sql2 = "SELECT DISTINCT mercurio.linea.nombre_linea, mercurio.recorrido.letra_recorrido FROM mercurio.linea, mercurio.recorrido,
mercurio.recorrido_has_ciudad, mercurio.ciudad, mercurio.recorrido_has_calle, mercurio.calle, mercurio.recorrido_has_sector,
mercurio.sector, mercurio.recorrido_has_lugar, mercurio.lugar WHERE mercurio.linea.id_linea = mercurio.recorrido.linea_id_linea
AND mercurio.recorrido.id_recorrido = mercurio.recorrido_has_ciudad.recorrido_id_recorrido AND mercurio.recorrido_has_ciudad.ciudad_id_ciudad =
(SELECT mercurio.ciudad.id_ciudad FROM mercurio.ciudad WHERE mercurio.ciudad.nombre_ciudad = 'Hualpén') AND mercurio.recorrido_has_calle.calle_id_calle =
(SELECT mercurio.calle.id_calle FROM mercurio.calle WHERE mercurio.calle.nombre_calle = 'Gibraltar') AND mercurio.recorrido_has_sector.sector_id_sector =
(SELECT mercurio.sector.id_sector FROM mercurio.sector WHERE mercurio.sector.nombre_sector = 'Diego Portales') AND mercurio.recorrido_has_lugar.lugar_id_lugar =
(SELECT mercurio.lugar.id_lugar FROM mercurio.lugar WHERE mercurio.lugar.nombre_lugar = 'ENAP') AND mercurio.linea.nombre_linea
IN ( SELECT DISTINCT mercurio.linea.nombre_linea FROM mercurio.linea, mercurio.recorrido, mercurio.recorrido_has_ciudad, mercurio.ciudad, mercurio.recorrido_has_calle,
mercurio.calle, mercurio.recorrido_has_sector, mercurio.sector, mercurio.recorrido_has_lugar, mercurio.lugar WHERE mercurio.linea.id_linea = mercurio.recorrido.linea_id_linea
AND mercurio.recorrido.id_recorrido = mercurio.recorrido_has_ciudad.recorrido_id_recorrido AND mercurio.recorrido_has_ciudad.ciudad_id_ciudad =
(SELECT mercurio.ciudad.id_ciudad FROM mercurio.ciudad WHERE mercurio.ciudad.nombre_ciudad = 'Talcahuano') AND mercurio.recorrido_has_calle.calle_id_calle =
(SELECT mercurio.calle.id_calle FROM mercurio.calle WHERE mercurio.calle.nombre_calle = 'Bilbao') AND mercurio.recorrido_has_sector.sector_id_sector =
(SELECT mercurio.sector.id_sector FROM mercurio.sector WHERE mercurio.sector.nombre_sector = 'Cerro la Gloria') AND mercurio.recorrido_has_lugar.lugar_id_lugar =
(SELECT mercurio.lugar.id_lugar FROM mercurio.lugar WHERE mercurio.lugar.nombre_lugar = 'ENAP')
)";
$result = mysql_query($sql2, $link);
if($result === FALSE) {
die(mysql_error()); // TODO: better error handling
}
while($row = mysql_fetch_array($result))
{
echo $row['nombre_linea'];
echo $row['letra_recorrido'];
}
pd: No adjunte las conexiones con el servidor o la BBDD ya que ahí no esta el error todo se conecta sin problemas. Resumi el codigo del PHP ya que se supone q las VARIABLES son seleccionadas por el usuario, como pueden apreciar puse las variables establecidas para trabajar directamente con la BBDD.
Necesito su ayuda enormemente, es para mi tesis final y no logro hacer funcionar esta consulta con el PHP, reitero la lógica y sintaxis del "select" funciona correctamente en PHPMYADMIN consultado a la bbdd correspondiente. Creo que el drama puede estar en el IN() del select, o en los parentesis del SELECT completo. ALGUNA IDEA?¿
Saludos Colegas.