Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/03/2009, 04:21
Gigatron
 
Fecha de Ingreso: julio-2004
Mensajes: 43
Antigüedad: 19 años, 10 meses
Puntos: 0
Respuesta: Consulta anidada y campos repetidos

Hola juamd, gracias por la respuesta.

En realidad es algo mas que eso, porque no es solo contar la cantidad de mensajes y la cantidad de besos de cada usuario, ademas tengo que listar los IDs de la persona que los ha enviado. Los mensajes y besos estan en la misma tabla de la db, solo que en los besos, el campo "mensaje" contiene la cadena ***beso*** , por eso lo de "if ($mensaje == '***beso***') {".

En realidad la funcinalidad la he consegido hacer, pero con un script diferente, con dos While, uno dentro de otro, el primero consulta la tabla usuarios, y el segundo la tabla mensajes. Asi recorro la tabla usuarios, y por cada usuario recorro la tabla mensajes en busca de todos los datos que necesito para cada uno, el problema, que tarda una eternidad en terminar. Por eso lo de hacerlo con un solo bucle y una consulta anidada.

Esta era la primera versión de mi código, la que funciona pero tarda demasiado.

Código PHP:
<?
$sql_users 
mysql_query("select id from users where sexo = 1 and buscasexo = 0",$dbc);
while(
$row_users mysql_fetch_array($sql_users)){
    
$user $row_users['id'];
    
$num_besos 0;
    
$num_mensajes 0;
    
$id_remitentes_besos '';
    
$id_remitentes_mensajes '';
    echo 
'<b>'.$user.'</b><br>';
    
$ahora time();
    
$ahora_G date("G",$ahora);
    if (
$ahora_G 15) {
        
$ahora_mod $ahora 64800;
    }
    else {
        
$ahora_mod $ahora 21600;
    }
    
$sql_mensajes mysql_query("select idremitente,mensaje,fecha from mensajes where iduser = '".$user."' and fecha > '".$ahora_mod."'",$dbc);
    while(
$row_mensajes mysql_fetch_array($sql_mensajes)){
        
$idremitente $row_mensajes['idremitente'];
        
$mensaje $row_mensajes['mensaje'];
        if (
$mensaje == '***beso***') {
            
$num_besos $num_besos 1;
            
$id_remitentes_besos 'ID:'.$idremitente.', '.$id_remitentes_besos;
        }
        else {
            
$num_mensajes $num_mensajes 1;
            
$id_remitentes_mensajes 'ID:'.$idremitente.', '.$id_remitentes_mensajes;
        }
    }
    if ((
$num_besos 0) or ($num_mensajes 0)) {
        if (
$num_mensajes 0){
            echo 
'&nbsp;&nbsp;&nbsp;&nbsp;Mensajes: '.$num_mensajes.'<br>';
            echo 
'&nbsp;&nbsp;&nbsp;&nbsp;Remitentes: '.$id_remitentes_mensajes.'<br>';
        }
        if (
$num_besos 0) {
            echo 
'&nbsp;&nbsp;&nbsp;&nbsp;Besos: '.$num_besos.'<br>';
            echo 
'&nbsp;&nbsp;&nbsp;&nbsp;Remitentes: '.$id_remitentes_besos.'<br>';
        }
    }
}
?>
Gracias.