Foros del Web » Programando para Internet » PHP »

Condicional en WHILE

Estas en el tema de Condicional en WHILE en el foro de PHP en Foros del Web. Hola a todos. Tengo un problema para imprimir un resultado. Ya obtuve datos de una consulta a 2 tablas. Tabla1 y Tabla2 Al momento de ...
  #1 (permalink)  
Antiguo 15/06/2019, 17:22
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 10 años, 2 meses
Puntos: 0
Pregunta Condicional en WHILE

Hola a todos.
Tengo un problema para imprimir un resultado.

Ya obtuve datos de una consulta a 2 tablas. Tabla1 y Tabla2

Al momento de imprimir los resultados de Tabla2 quiero condicionar que solo imprima lo que coincida con el campo "usuarios" de la consulta echa a Tabla1. Ambas tablas tienen el campo.

Lo trato de hacer con un IF, pero solo me imprime un resultado.

Código PHP:
<?php 

    $uOnline 
mysqli_fetch_array($contONLINE);
    
$uData mysqli_fetch_array($userDATA);

    if (
$uOnline['usuario']==$uData['usuario']){
        echo 
"<li><img src='images/" $uData['foto'] . "'><h4>" utf8_encode(ucwords($uData['usuario'])) . "</h4><p><b>" ucwords($uData['rol']) . " </b></p><p>" $uData['direccion'] . "</p></li>";
    }
?>

Lo intento hacer con WHILE, pero resulta un bucle desastroso.


Código PHP:
<?php 

    $uOnline 
mysqli_fetch_array($contONLINE);
    
$uData mysqli_fetch_array($userDATA);

    while (
$uOnline['usuario']==$uData['usuario']){
        echo 
"<li><img src='images/" $uData['foto'] . "'><h4>" utf8_encode(ucwords($uData['usuario'])) . "</h4><p><b>" ucwords($uData['rol']) . " </b></p><p>" $uData['direccion'] . "</p></li>";
    }
?>
Lo intente con IF... WHILE... pero tampoco me resulto. ¿Alguna idea?

De antemano muchas gracias!!
  #2 (permalink)  
Antiguo 15/06/2019, 21:53
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.946
Antigüedad: 11 años, 1 mes
Puntos: 2183
Respuesta: Condicional en WHILE

Muestra las consultas, creo que podrías hacer solo una en vez de dos.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 15/06/2019, 21:57
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 794
Antigüedad: 14 años, 4 meses
Puntos: 24
Respuesta: Condicional en WHILE

No sé como estén estructuradas tus tablas, pero prueba lo siguiente:

Si tu tabla 1 es:

Código MySQL:
Ver original
  1. id, name_user

y tu tabla 2 es:

Código MySQL:
Ver original
  1. id, id_user_tabla1, foto, roll, direccion

Primero estructura bien tus consultas:

tabla 1:
Código PHP:
$query1 mysqli_query($conn"Select * from tabla1 Where name_user =" $_GET['user']); -> por citar un ejemplo.

$rowQuery1 mysqli_fetch_assoc($query1);
$user $rowQuery1['name_user']; 
tabla 2:
Código PHP:
$query2 mysqli_query($conn"Select * from tabla2 Where id_user_tabla1 =" .  $user);

while(
$rowQuery2 mysqli_fetch_assoc($query2)){ 
Código HTML:
Ver original
  1. <li><?php echo $rowQuery2['direccion'] ?></li>

Código PHP:

La otra opción, si quieres enviar todos los datos solo usa:

Código PHP:
$query2 mysqli_query($conn"Select * from tabla2 Left Join tabla1 On(id_user_tabla1 = id) Where id_user_tabla1 =" .  $user);

while(
$rowQuery2 mysqli_fetch_assoc($query2)){... 
y te imprime en orden todos los datos de todos los usuarios.

Saludos!!
  #4 (permalink)  
Antiguo 16/06/2019, 09:54
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Condicional en WHILE

Hola Triby las consultas son.

Código SQL:
Ver original
  1. $contONLINE = mysqli_query($db, "SELECT usuario, online FROM SESIONES WHERE online = '1' GROUP BY usuario");
  2.   $fullONLINE = mysqli_num_rows($contONLINE);
  3.  
  4.   $userDATA = mysqli_query($db, "SELECT  * FROM USUARIOS");
  5.   $fulldata = mysqli_num_rows($userDATA);
  #5 (permalink)  
Antiguo 16/06/2019, 09:57
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Condicional en WHILE

Hola Middrel gracias por tu respuesta, las 2 primeras opciones las intente pero no resulto como esperaba, tendre que intentar con la ultima que comentas.
  #6 (permalink)  
Antiguo 16/06/2019, 17:19
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Condicional en WHILE

Tampoco me funciono, el tema es que hago una consulta previa para saber que usuarios tienen el valor "1" del campo online, y en relación a eso quiero hacer una condición para filtrar los resultados de la siguiente consulta. No se si se entienda la idea.
  #7 (permalink)  
Antiguo 17/06/2019, 13:31
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.946
Antigüedad: 11 años, 1 mes
Puntos: 2183
Respuesta: Condicional en WHILE

Se entiende perfectamente la idea, pero sigue sin ser necesario realizar dos consultas, basta con que obtengas los usuarios online y hagas join a la otra tabla, ahí tendrás todo lo que necesitas.
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 17/06/2019, 16:58
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Condicional en WHILE

Ok, quizá no este muy familiarizado, una vez obteniendo mi primera consulta de usuarios en linea como hago el JOIN y que pueda extraer distintos valores de la segunda tabla? Los usuarios en linea puede ser 1 o pueden ser 100 y de la segunda consulta requeriría varias columnas .
Muchas gracias por los comentarios Triby.
  #9 (permalink)  
Antiguo 17/06/2019, 21:30
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.946
Antigüedad: 11 años, 1 mes
Puntos: 2183
Respuesta: Condicional en WHILE

A esta consulta solo necesitas agregar la segunda tabla
Código SQL:
Ver original
  1. SELECT usuario, online FROM SESIONES WHERE online = '1' GROUP BY usuario

Código SQL:
Ver original
  1. SELECT sesiones.usuario, sesiones.online, usuarios.*
  2. JOIN usuarios ON sesiones.usuario = usuarios.id
  3. FROM sesiones
  4. WHERE sesiones.online = '1' GROUP BY sesiones.usuario

A tener en cuenta:
- Es conveniente especificar tabla y columna por si hay columnas con el mismo nombre en varias tablas
- En JOIN especificas los campos que coinciden en ambas tablas, en este caso supongo que es id, aunque puede ser otra cosa, desconozco tus tablas
- Al ejecutar la consulta cada registro va a tener todos los campos de la tabla usuarios
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 18/06/2019, 06:51
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Condicional en WHILE

Gracias Trivy lo prueba y te comento como salio. Buen día.
  #11 (permalink)  
Antiguo 19/06/2019, 11:27
Avatar de senseeye3led  
Fecha de Ingreso: abril-2016
Ubicación: 127.0.0.1
Mensajes: 135
Antigüedad: 3 años, 5 meses
Puntos: 8
Respuesta: Condicional en WHILE

No se suele recomendar hacer consultar que contengan:
Código:
SELECT  * FROM tbl
En medida que pueda evitalos, a la larga lo agradecerás.
  #12 (permalink)  
Antiguo 20/06/2019, 12:41
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Condicional en WHILE

Hola senseeye3led tienes razón.

Hola de nuevo Triby intente de esa forma igual me mando error al momento de querer imprimir .

Código PHP:
Ver original
  1. while($uData=mysqli_fetch_array($fullONLINE,MYSQLI_ASSOC)){
  2.                          echo "<li><img src='images/" . $uData['foto'] . "'><h4>" . utf8_encode(ucwords($uData['usuario'])) . "</h4><p><b>" . ucwords($uData['rol']) . " </b></p><p>" . $uData['direccion'] . "</p></li>";
  3.                       }
  #13 (permalink)  
Antiguo 20/06/2019, 21:35
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.946
Antigüedad: 11 años, 1 mes
Puntos: 2183
Respuesta: Condicional en WHILE

Para poder ayudar es necesario que proporciones toda la información, aunque no creas que es relevante, en este caso, hay que ver cómo armaste la consulta y cuál es el error que obtienes.
__________________
- León, Guanajuato
- GV-Foto



La zona horaria es GMT -6. Ahora son las 11:50.