Foros del Web » Programando para Internet » PHP »

No consigo hacer que funcione esta consulta

Estas en el tema de No consigo hacer que funcione esta consulta en el foro de PHP en Foros del Web. Hola amigos, estoy intentando hacer funcionar una consulta pero no soy capaz, la consulta tiene que mostrarme que usuarios tienen acceso a unos locutores, os ...
  #1 (permalink)  
Antiguo 28/04/2015, 11:49
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
No consigo hacer que funcione esta consulta

Hola amigos, estoy intentando hacer funcionar una consulta pero no soy capaz, la consulta tiene que mostrarme que usuarios tienen acceso a unos locutores, os pongo ejemplo de las dos tablas:

Tabla locutores:

id | codigo | genero | idioma | descripcion | audio

Tabla asignaciones:

id | id_usuario | id_locucion

El caso es que en la tabla asignaciones hay unos registros guardados que son el id del locutor y el id del usuario, esto será para mostrarle al usuario solo las locuciones a las que tiene acceso, no consigo hacer dicha consulta, buscando por el foro he encontrado formas de hacerla usando iner join, pero no lo consigo. El id del usuario se recoge en: $id_usuario["id"] .

Yo he intentado con esto pero no lo consigo:

Código PHP:
Ver original
  1. $consulta = mysql_query("SELECT * FROM locutores INNER JOIN asignaciones ON locutores.id = asignaciones.id_locutor  WHERE asignaciones.id_usuario = '".$array["id"]."'");
  2. $total_resultados = mysql_num_rows($consulta);
  3.   echo "Resultados : ".$total_resultados;

El último echo no muestra nada, ¿Alguna ayuda?

Saludos!
  #2 (permalink)  
Antiguo 28/04/2015, 13:33
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: No consigo hacer que funcione esta consulta

Primero, asegúrate de que $array["id"] contenga algún dato y si es que lo tiene, prueba dicha consulta con dicho dato (no con la variable) directamente en phpMyadmin para que corrobores que no se trate de un error en otra parte de tu código.

Por cierto, si los identificadores son de tipo numérico, no es necesario colocar las comillas simples.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 28/04/2015, 14:04
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: No consigo hacer que funcione esta consulta

Si que tiene datos, ahora me muestra esto:

Resultados : 4

Yo creo que está mal y no se porque, en la tabla con el ID del usuario sólo hay un registro ¿Porque puede pasar?
  #4 (permalink)  
Antiguo 28/04/2015, 14:26
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: No consigo hacer que funcione esta consulta

Haz un var_dump($consulta) para saber qué devuelve la consulta.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 28/04/2015, 14:44
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: No consigo hacer que funcione esta consulta

Me muestra esto:

resource(3) of type (mysql result) Resultados : 4

Que no tengo ni idea de que es.. :D
  #6 (permalink)  
Antiguo 28/04/2015, 15:27
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: No consigo hacer que funcione esta consulta

Cita:
Iniciado por rompeguesos Ver Mensaje
Yo creo que está mal y no se porque, en la tabla con el ID del usuario sólo hay un registro ¿Porque puede pasar?
Es porque estás tomando todos los valores de ambas tablas, creando un producto cartesiano. Sería mejor que especifiques al conjunto de campos cuyos datos deseas tomar, porque así como está (con el asterisco solo), se toma de ambas tablas.

Un SELECT locutores.* podría servirte.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 28/04/2015, 19:35
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: No consigo hacer que funcione esta consulta

en vez de usar $array['id']
no deberías de usar $id_usuario["id"] ya que es la variable que describes al inicio?
Tu query esta bien.

O sino usa alias, es decir cambia tu query por el siguiente:
"SELECT loc.* FROM locutores loc INNER JOIN asignaciones asi ON asi.id_locutor=loc.id WHERE asi.id_usuario = '".$array["id"]."'"

Última edición por oggy_15_3; 28/04/2015 a las 20:07
  #8 (permalink)  
Antiguo 29/04/2015, 02:51
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: No consigo hacer que funcione esta consulta

Yo me estoy volviendo loco... :D si hago lo que me decís, me muestra esto:

bool(false) Resultados :

Con lo que del otro modo por lo menos mostraba algún resultado aunque fuesen 4 en vez de 1 jajajaj :P

Ahora mismo tengo esto:

Código PHP:
Ver original
  1. $consulta = mysql_query("SELECT loc.* FROM locutores loc INNER JOIN asignaciones asi ON asi.id_locutor=loc.id WHERE asi.id_usuario = '".$array["id"]."' AND locutores.genero='Masculino'");

Por cierto el id del usuario va correctamente en: $array["id"], me equivoque antes al escribirlo, al hacerle un echo me muestra el id "2".

¿Que ando haciendo mal?
  #9 (permalink)  
Antiguo 29/04/2015, 07:24
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: No consigo hacer que funcione esta consulta

"Creo" que lo he solucionado!!

Con esta consulta sólo me muestra los locutores asignados, si tiene dos, muestra 2, si tiene 4 muestra 4.. asi... la consulta ha quedado así:

Código PHP:
Ver original
  1. $consulta = mysql_query("SELECT * FROM locutores as loc LEFT JOIN asignaciones as asi ON loc.id = asi.id_locucion WHERE asi.id_usuario = '".$array["id"]."' AND loc.genero='Masculino'");

Lo que veo que ha cambiado es LEFT JOIN, no se muy bien la diferencia, pero ya les digo, creo que funciona.
  #10 (permalink)  
Antiguo 29/04/2015, 09:37
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: No consigo hacer que funcione esta consulta

Cuando usas el LEFT JOIN, tomas a los valores de la tabla de la izquierda (la primera de las dos mencionadas, que en este caso es 'locutores') tengan o no correspondencia con los de la tabla de la derecha ('asignaciones'). Para los que no tengan correspondencia en el/los campo/s especificados, se mostrará NULL.



Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #11 (permalink)  
Antiguo 02/05/2015, 10:01
 
Fecha de Ingreso: mayo-2015
Mensajes: 9
Antigüedad: 8 años, 11 meses
Puntos: 1
Respuesta: No consigo hacer que funcione esta consulta

por lo que he podido ver, creo que el fallo estaba en que usabas:
"asi.id_locutor=loc.id" y el campo "id_locutor" no existe
y luego has puesto
"loc.id = asi.id_locucion" por eso te funciona bien.

Saludos
  #12 (permalink)  
Antiguo 02/05/2015, 14:19
 
Fecha de Ingreso: junio-2009
Mensajes: 101
Antigüedad: 14 años, 10 meses
Puntos: 13
Respuesta: No consigo hacer que funcione esta consulta

Ponlo así y a ver que error te da:
Código PHP:
$consulta mysql_query("SELECT * FROM locutores INNER JOIN asignaciones ON locutores.id = asignaciones.id_locutor  WHERE asignaciones.id_usuario = '".$array["id"]."'") or die(mysql_error());
$total_resultados mysql_num_rows($consulta);
  echo 
"Resultados : ".$total_resultados

Etiquetas: mysql, registro, select, tabla, usuarios
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 16:43.