Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cómo saber si el registro de un while está en otra tabla

Estas en el tema de Cómo saber si el registro de un while está en otra tabla en el foro de PHP en Foros del Web. Hola a todos... no estoy seguro si esta consulta va aquí. Por favor, si me pueden dar una ayuda u orientarme... Hago un SELECT a ...
  #1 (permalink)  
Antiguo 23/04/2017, 07:30
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Cómo saber si el registro de un while está en otra tabla

Hola a todos... no estoy seguro si esta consulta va aquí.

Por favor, si me pueden dar una ayuda u orientarme...

Hago un SELECT a T1:

Código PHP:
$query "SELECT id FROM T1";
$result mysql_query($query); 
Mediante un while imprimo el SELECT a T1:

Código PHP:
<table><tr>
while( 
$row mysql_fetch_assoc($result)) {
    echo 
"<tr>\n";
    echo 
"<td>".$row['id']."</td>\n";
    echo 
"<td>"img1 ó img2"</td>\n";
    echo 
"</tr>\n";
}
</
tr></table
Ahora, necesito saber si el "id" obtenido en T1 se encuentra en la tabla 2 (T2) para poder imprimir en el while "img1 ó img2" dependiendo de sí está o no el "id" en T2.

Aclaro que las dos tablas no tiene la misma cantidad de registros, y que el campo "id" es común en las dos tablas, donde además es la clave primaria.

He intentado esto:

Código PHP:
while( $row mysql_fetch_assoc($result)) {
    
$query2 "SELECT id FROM T2";
    
$resulta2 =  mysql_query($query2);
    echo 
"<tr>\n";
    echo 
"<td>".$row['id']."</td>\n";
    echo 
"<td>";
        while( 
$row2 mysql_fetch_assoc($resulta2)) {
            if(
$row['id'] == $row2['id']){echo "img2"}else{echo "img2";}
    </
td>n";
    echo "
</tr>n";

Pero me pone una cantidad de imágenes de acuerdo a los registros que haya en T2.

También intenté hacer la consultan de la siguiente manera y luego incorporarla al while:

Código PHP:
$query2 "SELECT id FROM T1 INNER JOIN T2 ON (T1.id = T2.id)";
$resulta2 mysql_query($query2);

while( 
$row mysql_fetch_assoc($result)) {
    
$row2 mysql_fetch_assoc($resulta2);
    echo 
"<tr>\n";
    echo 
"<td>".$row['id']."</td>\n";
    echo 
"<td>";
        if(
$row['id'] == $row2['id']){echo "img2"}else{echo "img2";}
    </
td>n";
    echo "
</tr>n";

Esto no imprime en el lugar correcto, sino que empieza a imprimir desde el inicio de la tabla html.

Se me ha complicado y no puedo salir de este nudo... por favor si me pueden ayudar.
  #2 (permalink)  
Antiguo 23/04/2017, 23:59
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Cómo saber si el registro de un while está en otra tabla

El JOIN se usa para hacer solo una consulta y necesitas saber la diferencia entre cada opción; normalmente INNER JOIN te traerá registros que existen en las dos tablas; yo prefiero usar LEFT JOIN, ejemplo:

Código MySQL:
Ver original
  1. SELECT t1.id as id1, t1.img as img1, t2.is as id2, t2.img as img2
  2. FROM t1
  3. LEFT JOIN t2 ON t1.id = t2.id

Puesto que las columnas tienen el mismo nombre en ambas tablas, es necesario usar alias: nombre_de_columna as nombre_deseado

Código PHP:
Ver original
  1. $sql = '/* la consulta de arriba */';
  2. $result = mysql_query($sql);
  3. while($row = mysql_fetch_assoc($result)) {
  4.         // Si la imagen no existe en t2, entonces img2 será null
  5.         if($row['img2'] == NULL) {
  6.               // Muestras img1
  7.         } else {
  8.               // Muestras img2
  9.         }
  10. }

Sugerencia: la librería mysql es obsoleta y debes migrar a mysqli o, mejor aún, a PDO.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 24/04/2017, 04:00
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Cómo saber si el registro de un while está en otra tabla

Hola Triby, muchas gracias por responder y por tu ejemplo...

También lo he solucionado haciendo una subconsulta así:

Código PHP:
$query "SELECT id, (SELECT id FROM T2 WHERE T2.id = T1.id) AS idexist FROM T1";
$result mysql_query($query); 
... y lo imprimi de esta forma:

Código PHP:
<table><tr>
while( 
$row mysql_fetch_assoc($result)) {
    echo 
"<tr>\n";
    echo 
"<td>".$row['id']."</td>\n";
    echo 
"<td>";
        if(
$row['idexist'] > '0'){
            echo 
"img1";
        }else{
            echo 
"img2";
        }
    echo 
"</td>\n";
    echo 
"</tr>\n";
}
</
tr></table
Aparentemente está funcionando correctamente, aunque no se si es la solución más adecuada.

Nuevamente muchas gracias por tu tiempo... Saludos!!!

Etiquetas: mysql, registro, select, sql, tabla
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 02:30.