Tengo una duda sobre mostrar las consultas durante bastante tiempo y no se como solucionarlo.
Resulta que en mi web hay un archivo php que genera las fichas de los juegos, esto lo hace haciendo una consulta a la base de datos.
Os pongo la consulta (kilometrica).
Código PHP:
SELECT plataformas.nombre,nombreJuego,nombreOriginal,nombreAlternativos,
juegos.fechaSalida,nombreDistribuidor,nombreDesarrollador,region.region,
nombreGenero,numSerie,numRom,numJugadores,resumenJuego,
soporteFisico.nombre,numAlmacenamiento,caratula,contraportada,imagenInicio,
imagenFinal,fotografias,disponibleEn,codigoBarras,versionFirmware,
numActualizaciones,numTrofeos,perifericos FROM plataformas,juegos,
distribuidor,desarrollador,region,genero,soporteFisico WHERE
juegos.idPlataforma=plataformas.idPlataforma AND
juegos.desarrollador=desarrollador.iddesarrollador AND
juegos.region=region.idregion AND juegos.distribuidor=distribuidor.iddistribuidor
AND juegos.generos=genero.idgenero AND
juegos.soporteFisico=soportefisico.idSoporteFisico AND idJuego='$id';
Esa consulta funciona perfectamente en caso de tener todos los campos llenos.
Ahora bien, como vereis a simple vista esa consulta es muuy larga por lo que pense en hacerla en partes, una parte para los campos obligatorios, otra para los idiomas, voces.....
El problema viene cuando tengo un juego que no tiente datos en el campo de alguna relacion, osea en nombreDistribuidor, generos, etc me sale el error y no muestra nada y mirando con workbench solo me muestra si hay algo en todos los campos que relaciono.
Probe hacerlo tambien con INNER JOIN pero igual si hay un campo relacionado que no tiene datos la consulta me da error.
Entonces mi pregunta es, como puedo solucionarlo, porque hay juegos que a lo mejor el nombre del Distribuidor no se sabe, o que algun campo no exista para ese juego (ej: las clasificaciones (pegi, esrb, etc) no existian en las años 70 cuando si habian juegos) y como la ficha se hacen para todos los jugos deberia haber alguna solucion que a mi se me escapa.
Y en cuanto a lo que he dicho antes que al tener una consulta muy larga la he fracmentado, me queda lo siguiente en el archivo php.
Código PHP:
/* Campos especificos */
$especificos = "SELECT numRom,versionFirmware,numActualizaciones,numTrofeos,iconoJuego FROM juegos WHERE idJuego='$id';";
$resultadoEspecifico= mysql_query($especificos) or die(mysql_error());
if(mysql_num_rows($resultadoEspecifico)==0) die("No hay registros para mostrar");
$arrayEspecifico = mysql_fetch_array($resultadoEspecifico);
//Para sacar la galeria
$registroArray="SELECT fotografias FROM juegos WHERE idJuego='$id';";
$registroArrayConsulta=mysql_query($registroArray);
$cadena=mysql_result($registroArrayConsulta, 0);
$miArray=explode(',',$cadena);
$numComas=substr_count($cadena, ',');
// Para sacar las fotos
$discosArray="SELECT imagenesMedia FROM juegos WHERE idJuego='$id';";
$discosArrayConsulta=mysql_query($discosArray);
$cadenaDiscos=mysql_result($discosArrayConsulta, 0);
$arrayDiscos=explode(',',$cadenaDiscos);
$numComasDiscos=substr_count($cadenaDiscos, ',');
// Para sacar los idiomas
$idiomasArray="SELECT idiomas FROM juegos WHERE idJuego='$id';";
$idiomasArrayConsulta=mysql_query($idiomasArray);
$cadenaIdiomas=mysql_result($idiomasArrayConsulta, 0);
$arrayIdiomas=explode(',',$cadenaIdiomas);
$numComasIdiomas=substr_count($cadenaIdiomas, ',');
// Para sacar las voces
$vocesArray="SELECT voces FROM juegos WHERE idJuego='$id';";
$vocesArrayConsulta=mysql_query($vocesArray);
$cadenaVoces=mysql_result($vocesArrayConsulta, 0);
$arrayVoces=explode(',',$cadenaVoces);
$numComasVoces=substr_count($cadenaVoces, ',');
$nombreOriginal=$arrayConsulta['nombreOriginal'];
Muchas gracias.