Foros del Web » Programando para Internet » PHP »

Duda para mostrar ciertas consultas

Estas en el tema de Duda para mostrar ciertas consultas en el foro de PHP en Foros del Web. Buenas a todos. Tengo una duda sobre mostrar las consultas durante bastante tiempo y no se como solucionarlo. Resulta que en mi web hay un ...
  #1 (permalink)  
Antiguo 13/07/2012, 05:32
 
Fecha de Ingreso: enero-2010
Mensajes: 30
Antigüedad: 14 años, 10 meses
Puntos: 0
Duda para mostrar ciertas consultas

Buenas a todos.

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'
NOTA: Todo es una unica linea.

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';";
$resultadoEspecificomysql_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($registroArrayConsulta0);
$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($discosArrayConsulta0);
$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($idiomasArrayConsulta0);
$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($vocesArrayConsulta0);
$arrayVoces=explode(',',$cadenaVoces);
$numComasVoces=substr_count($cadenaVoces',');

$nombreOriginal=$arrayConsulta['nombreOriginal']; 
Dejando de lado la cadena con los campos obligatorios (que no me funciona) como veis en realidad son distintas consultas pero todas las demas linas son las mismas salvo cambiando el nombre de variable. Hay alguna forma de depurar esto, tipo alguna funcion donde mandes la consulta pero genere variables distintas para ser usadas??

Muchas gracias.
  #2 (permalink)  
Antiguo 13/07/2012, 10:04
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 14 años, 4 meses
Puntos: 55
Respuesta: Duda para mostrar ciertas consultas

Cuando dices que crea las Fichas de los juegos es como la informacion relacionada al juego que buscan.

para hacer la consulta la haces por medio de un formulario tipo busqueda?
__________________
<?php echo "No te metas a lo hondo del Mar si no sabes nadar, primero aprende a nadar" ?>
...Error en linea: 1 o.O
  #3 (permalink)  
Antiguo 13/07/2012, 10:18
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 14 años, 5 meses
Puntos: 63
Desacuerdo Respuesta: Duda para mostrar ciertas consultas

¿Cuál es la razón por la que quieres hacer varias consultas?

Pienso que es más óptimo hacer una sola consulta grande que hacer 7, por ejemplo...

Saludos...
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #4 (permalink)  
Antiguo 13/07/2012, 10:24
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 9 meses
Puntos: 155
Respuesta: Duda para mostrar ciertas consultas

no has intentado procedimientos almacenados?? son mas galletudos, otra opción podrían ser las tablas remporales donde metieras resultados de tus querys y de ahi hacer otro query mas relax
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #5 (permalink)  
Antiguo 13/07/2012, 10:46
 
Fecha de Ingreso: enero-2010
Mensajes: 30
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Duda para mostrar ciertas consultas

Buenas.

Ante todo dejo una foto de como queda una ficha cuando funciona la consulta (todos los campos que se relacionan con otra tabla estan rellenos).
Aunque hay tres campos que no acceden a la bbdd y otros (no relacionados) que no tiene nada, tambien faltan algunas secciones que estan abajo, pero ahí no tengo problemas.



johhan16.

De momento no estoy usando ningun tipo de formulario de busqueda es algo que quiero poner una vez acabe con algunas secciones mas importantes entre ellas la ficha de los juegos.

En cuanto a la ficha se crea cuando pulso el link en el listado de juegos, o desde la seccion de la plataforma en concreto, lo que almaceno es un identificador para acceder al juego.

Heiroon.

A mi modo de ver uso mas consultas por temas de velocidad, pienso que una consulta muy larga puede ser tedioso para la bbdd buscar mas de 30 campos en la tabla sabiendo que algunos campos van a estar vacios y si lo divido en secciones puede ser mas rapido, aunque seguramente me equivoque si hago una buena optimizacion de los select.

Por otra parte si lo diviso en secciones puedo trabajar independientemente una seccion de las otras sin tener que usar la consulta larga, por que lo que gano un poco de tiempo de busqueda.

Tambien pienso que es mas seguro, y mas facil de visualizar en caso de tener un error prefiero tener varias consulta normalitas que una muy larga.

Sobre este tema he pensado en realizar una funcion coyus parametros sean la consulta y un nombre, para que dicha funcion cree el array cuyo nombre sera la que se ha dado en el parametro, con eso me ahora unas cuantas lineas repetitivas.

mogurbon.

Lo de procedimientos almacenados no se como se hace en mysql o php, pero no me ha dado por pensar en las tablas temporales o virtuales.


Otra forma que se me esta ocurriendo es poner en los campos que se relacionan por defecto poner tbc/no tiene, no encontrado, o algo parecido.

Con eso nunca estara vacio y en teoria si me funcionarian las consultas, osea, algo similar cuando en una bbdd de musica buscar un artista, no hay una foto y sale la foto por defecto de no existe.
  #6 (permalink)  
Antiguo 13/07/2012, 10:58
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 9 meses
Puntos: 155
Respuesta: Duda para mostrar ciertas consultas

http://www.webtaller.com/construccio...ales-mysql.php
http://dev.mysql.com/doc/refman/5.0/...rocedures.html
http://www.php.net/manual/es/pdo.pre...statements.php


honestamente lo de la tabla temporal se me hace una rancherada pero pues son mañas que se van dando para solucionar a toda costa lo que se necesita pero a mi parecer lo mejor seria usar pdo con un procedimiento almacenado para mejorar el rendimiento de tu consulta que ademas tienes que depurar si un campo no existe utiliza un left o un right join


http://www.aulaclic.es/sql/t_3_5.htm
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #7 (permalink)  
Antiguo 13/07/2012, 11:06
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 14 años, 4 meses
Puntos: 55
Respuesta: Duda para mostrar ciertas consultas

Bueno lo que yo haria en tu caso es hacer una primera consulta grande comparando los datos que sepas que siempre existiran.

luego vas creando consultas separadas de los datos que a veces estan y a veces no, de que forma?

Código PHP:
Ver original
  1. //primero la consulta grande imaginemos que es $sql
  2.  
  3. $array=mysql_fetch_array($sql);
  4.  
  5. //aqui revisamos algun dato a ver si existe
  6.  
  7. if (isset($array['datoabuscar'])) {
  8. //hacemos la consulta del dato a buscar
  9. }
  10.  
  11. if (isset($array['datoabuscar2'])) {
  12. //hacemos la consulta del dato a buscar2
  13. }

y asi sucesivamente, espero que me entiendas
__________________
<?php echo "No te metas a lo hondo del Mar si no sabes nadar, primero aprende a nadar" ?>
...Error en linea: 1 o.O
  #8 (permalink)  
Antiguo 13/07/2012, 11:30
 
Fecha de Ingreso: enero-2010
Mensajes: 30
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Duda para mostrar ciertas consultas

Gracias a los dos por vuestras sugerencias los mirare detenidamente.

Por otra parte he estado probando formas de "escurrirel bulto" y he encontrado una.

Basicamente almaceno en las tablas relacionandas en identificador 0 el valor "NO existe - No encontrado" y en los valores por defecto si no pongo nada es 0 por lo que automaticamente siempre tendran el valor que le pongo o "NO existe - No encontrado" , ahora bien, para que no se muestre este texto en los campos lo hago con un if.

Suponiendo que el Desarrollador de un juego no lo se o no esta, lo soluciono asi.

consulta.

Código PHP:
SELECT idjuego,nombreJuego,nombreDesarrollador FROM juegos,desarrollador WHERE juegos.desarrollador=desarrollador.iddesarrollador AND idjuego='$id';"; 
php.

Código PHP:
<?php if ($arrayConsulta['nombreDesarrollador']=="No Esta - No encontrado") { echo "";} else { echo $arrayConsulta2['nombreDesarrollador'];}?>
Solo tendria que poner esto en todos los campos que se relacionan para solucionarlo, pero como he dicho al principio seria una forma de "escurrir el bulto" no se si es la mejor forma.

Aun asi, mirare mas lo de right join y left join que sin saber lo que es, supongo que sera que si un campo este vacio salte al de la derecha o izquierda.

Os ire informando.

Gracias.

Etiquetas: mysql, registro, sql, variables, ciertos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:38.