Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con un select

Estas en el tema de Problema con un select en el foro de Mysql en Foros del Web. Hola, Estoy teniendo un problema con los resultados que me muestra un select ya que al hacer el JOIN me los muestra duplicados. El tema ...
  #1 (permalink)  
Antiguo 18/12/2011, 08:27
 
Fecha de Ingreso: julio-2007
Mensajes: 15
Antigüedad: 16 años, 9 meses
Puntos: 0
Pregunta Problema con un select

Hola,

Estoy teniendo un problema con los resultados que me muestra un select ya que al hacer el JOIN me los muestra duplicados. El tema es el sig:


Tengo el sig código:

Código PHP:
<h4>Libros</h4>
<form id="form" method="post" action="libros.php">
            
<table id="box-table-a" width="475" border="1" style="text-align:center;">
            <tr> 
                <th scope="col">Titulo</th>
                <th scope="col">Autor</th>
                <th scope="col">Editorial</th>
                <th scope="col">ISBN</th>
                <th></th>
                <th scope="col"><input type="checkbox" name="checkbox" onClick="seleccionar_todo(this);"/></th>
            </tr>

// Arma la consulta y muestra la tabla con los resultados
<?php
$SQL 
"SELECT libro.*, prestamo.estado FROM libro LEFT JOIN prestamo ON libro.titulo = prestamo.titulo;" ;
 
$QUERY mysql_query$SQL ) or die (mysql_error()); 

while( 
$fil mysql_fetch_assoc$QUERY ) ) 

                     
?> 
<tr>
       <td><?php echo $fil['titulo']; ?></td>  
       <td><?php echo $fil['autor']; ?></td> 
        <td><?php echo $fil['editorial']; ?></td> 
        <td><?php echo $fil['ISBN']; ?></td>  
                     
         
 <?php

// Muestra el estado del libro recuperando el campo estado de la tabla prestamo                      
switch($fil['estado']){
    
 case 
'Disponible':
  
$dis "green.png";
 break;
                          
 case 
'Prestado':
 
$dis "red.png";
  break;
                          
  case 
'No Devuelto':
$dis "red.png";
  break;
                          
default:
 
$dis "green.png";
}

$dis '<img width="16" height="16" src="img/'.$dis.'">' ;  
?>
<td><?php echo $dis?></tb> 
<td><input name="idLibro[]" type="checkbox" value="<?php echo $fil['libroID']; ?><?php $estado ?> /></td>
<?php ?>
 
</tr>
</table>
                <p align="center" class="nav">
                  <input name="devolver" type="submit" id="Devolver" value="Devolver"  /> 
                  <input name="prestar" type="submit" id="Prestar" value="Prestar"  />
                  <input name="borrar" type="submit" id="Borrar" value="Borrar"  />
                  <input name="Modificar" type="submit" id="Modificar" value="Modificar"  />
                  <input name="agregar" type="submit" id="Agregar" value="Agregar"  /> 
                </p>
        </form>

Con esto todo bien, el tema es que al prestar un libro una vez y al devolverlo todo bien, el tema es que al prestarlo por segunda vez.. aparece dos veces en la misma tabla:

libroID titulo autor editorial ISBN estado
13 "PHP 6" "Weiro Meier" "Fox Andina" 312432 Disponible
13 "PHP 6" "Weiro Meier" "Fox Andina" 312432 Prestado
14 "Diseño " "Julio Gomez Lopez" Starbooks 978849 NULL
15 "Web Design Book" "The pepin press" "Pepin Press" 978905 Prestado
16 "Adobe Flash CS4 Pro" "Jose Luis Oros" Alfaomega 978600 Prestado
17 "La Rabia" "Rodolfo Arzac" Ciefuegos 437565 NULL


Intente modificar el query para ver si habia alguna forma pero el tema es que del mismo while salen los datos para armar la tabla principal de libros y del swich con el estado de cada libro que lo recupera de prestamo y lo muestra en la misma estructura, desconozco si puedo hacer dentro de un while de una consulta hacer otro de otra consulta...
  #2 (permalink)  
Antiguo 18/12/2011, 09:59
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: Problema con un select

No hagas un LEFT JOIN, proba con un INNER JOIN
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #3 (permalink)  
Antiguo 18/12/2011, 11:58
 
Fecha de Ingreso: julio-2007
Mensajes: 15
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema con un select

Cita:
Iniciado por linuxzero Ver Mensaje
No hagas un LEFT JOIN, proba con un INNER JOIN

Ninguno de los JOIN funciona porque me sigue apareciendo el registro con los dos estados
  #4 (permalink)  
Antiguo 18/12/2011, 12:05
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Problema con un select

indicanos algo en la tabla prestamo que tienes el id y el estado?? la consulta esta bien, lo que pasa es que tienes el mismo id con los dos estados fijate que la respuesta que colocas solo te duplica el primero ya que es el que tiene ambos estados
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 18/12/2011, 12:21
 
Fecha de Ingreso: julio-2007
Mensajes: 15
Antigüedad: 16 años, 9 meses
Puntos: 0
Pregunta Respuesta: Problema con un select

Cita:
Iniciado por carlos_belisario Ver Mensaje
indicanos algo en la tabla prestamo que tienes el id y el estado?? la consulta esta bien, lo que pasa es que tienes el mismo id con los dos estados fijate que la respuesta que colocas solo te duplica el primero ya que es el que tiene ambos estados

Es el Query me duplica los id y me muestra toda la informacion para ese libro, es como que junta todo el historial de ese libro y lo muestra. Por ahi tendría que ver cual es el último estado del libro haciendo algún calculo con la fecha actual y la fecha de devolución para determinar cual es el tiempo max y ahi sacar el último valor.

Te muestro lo que hay en las tablas ahora:

tabla libro:

libroID titulo autor editorial ISBN
13 "PHP 6" "Weiro Meier" "Fox Andina" 312432
14 "Diseño " "Julio Gomez Lopez" Starbooks 978849
15 "Web Design Book" "The pepin press" "Pepin Press" 978905
16 "Adobe Flash CS4" "Jose Luis Oros" Alfaomega 978600
17 "La Rabia" "Rodolfo Arzac" Ciefuegos 437565


tabla prestamo:

prestamo titulo usuario estado fecha_prestamo fecha_devolucion
id

11 "PHP 6" "santol" Disponible 2011-12-18 2011-12-18
12 "Web Design Book" "gimenez Prestado 2011-12-18 2011-12-20
13 "Adobe Flash CS4 Pro" "Perez" Prestado 2011-12-18 2011-12-30
14 "PHP 6" "Rodriguez E." Prestado 2011-12-18 2011-12-27


Como vez, cuando hace el JOIN trae los resultados de PHP6 que son dos en la tabla prestamo
  #6 (permalink)  
Antiguo 18/12/2011, 12:40
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Problema con un select

el no te esta duplicando los id el id de php6 en la tabla libro es 13, de ahi es de donde pides el id, asi de sencillo porque hay dos?? porque en tu tabla prestamo hay dos libros, lo unico que traes de tu tabla prestamo es el estado por lo tanto te va a repetir todos los datos de libro porque lo encontro dos veces en la tabla prestamo, lo unico que cambia es el estatus que esta en esta misma tabla, por cierto hasta donde se no es buena practica relacionar por nombres, es mejor crear codigo o id para esto, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 18/12/2011, 17:58
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Problema con un select

Cita:
Iniciado por carlos_belisario Ver Mensaje
el no te esta duplicando los id el id de php6 en la tabla libro es 13, de ahi es de donde pides el id, asi de sencillo porque hay dos?? porque en tu tabla prestamo hay dos libros, lo unico que traes de tu tabla prestamo es el estado por lo tanto te va a repetir todos los datos de libro porque lo encontro dos veces en la tabla prestamo, lo unico que cambia es el estatus que esta en esta misma tabla, por cierto hasta donde se no es buena practica relacionar por nombres, es mejor crear codigo o id para esto, saludos
Gracias por defender mi Query XD!

Estimado martingb no seas testarudo y escucha a carlos_belisario.

Por favor en phpMyAdmin coloca:

Código MySQL:
Ver original
  1. SELECT * FROM prestamo WHERE  prestamo.titulo='PHP 6'
Y revisa si no esta duplicado el titulo, e intentalo con cada titulo que veas repetido.
__________________
Mono programando!
twitter.com/eguimariano

Etiquetas: php
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 22:15.