Foros del Web » Programando para Internet » PHP »

Problema sistema de novedades

Estas en el tema de Problema sistema de novedades en el foro de PHP en Foros del Web. Buenas, estoy haciendo una red social, y la verdad creo que esto que me ha surgido es un fallo mio de los tontos pero no ...
  #1 (permalink)  
Antiguo 14/02/2012, 09:29
Avatar de roal40  
Fecha de Ingreso: enero-2012
Mensajes: 61
Antigüedad: 12 años, 2 meses
Puntos: 4
Problema sistema de novedades

Buenas, estoy haciendo una red social, y la verdad creo que esto que me ha surgido es un fallo mio de los tontos pero no doy con la solución.

El problema es... que en el sistema de novedades (Por ahora solo de estados) se muestren los más nuevos, solo de tus amigos y haya un limite de 15) bueno, todo eso funciona EXCEPTO... los más nuevos, no se porqué no se muestran ordenados, os dejo aquí el codigo:

Código PHP:
<div class="novedades">
<p>Novedades</p>
</div>
<?php
$resultadoamistades 
mysql_query("SELECT * FROM amigos WHERE (idnombreusuario = '$_SESSION[idusuario]' AND estado = '1')");
while(
$filaamistad mysql_fetch_array($resultadoamistades)){
$resultado mysql_query("SELECT * FROM comentarios WHERE (estado = '1' AND idnombre = $filaamistad[idusuariopedido]) ORDER BY idcomentario DESC LIMIT 12");
        while(
$fila mysql_fetch_array($resultado)){
            
?>
            <div class="estados">
            <div class="imagenestado">
            <? 
if(empty($fila['avatarcomentario'])) {
?>
<a href="perfil.php?id=<?=$fila['idnombre']?>"><img width="50px" height="50px" src="css/img/sinimagen.jpg"></a>
<?
     
}else{ 
?>
<a href="perfil.php?id=<?=$fila['idnombre']?>"><img width="50px" height="50px" src="<?=$fila['avatarcomentario']?>" onerror="this.onerror=null;this.src='css/img/sinimagen.jpg';"></a>
<?

     

     
?>
     </div>
     <div class="nombrestado">
                 <?
             
echo "<a href='perfil.php?id=".$fila['idnombre']."'>".$fila['nombre']."</a>";
            
?>
            </div>
     <div class="estadointroducido">
            <?
            
echo "".$fila['comentario'];
            
?>
            </div>
              <div id="nombrecomentario">
              <div class="fechaestados">
            <?
            
echo ''.$fila['fechacomentario'];
            
?>
            </div>
            </div>
            </div>
            <?
                                    
echo '<br/>';
        }
        }
  
?>
Un saludo.

Nota: El estado 1 de amigos es para seleccionar SOLO amigos, el estado 1 de comentarios es para SOLO estados.

Nota2: Como pueden ver... he puesto "ORDER BY idcomentario DESC" por lo que no entiendo porqué funciona como quiere...
  #2 (permalink)  
Antiguo 14/02/2012, 09:35
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Problema sistema de novedades

Veamos....


Primero, haces una consulta para saber los amigos.

Por ejemplo, imagina que el usuario "pepito" tiene como amigos a "carlitos" "laurita" y "cristinita".

"novedades" buscaria los amigos de pepito (y devolveria "carlitos", "laurita", "cristinita"). Y despues, busca novedades de carlitos, novedades de laurita, y novedades de cristinita...

¿Cual es el problema?

Que el orden que busca es el q te devuelve aqui:
Código PHP:
$resultadoamistades mysql_query("SELECT * FROM amigos WHERE (idnombreusuario = '$_SESSION[idusuario]' AND estado = '1')"); 
Así pues, primero buscara las novedades de cada amigo según el orden que tengan en la tabla amigos.

¿Es este el problema? :)
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 14/02/2012, 09:43
Avatar de roal40  
Fecha de Ingreso: enero-2012
Mensajes: 61
Antigüedad: 12 años, 2 meses
Puntos: 4
Respuesta: Problema sistema de novedades

Cita:
Iniciado por Eleazan Ver Mensaje
Veamos....


Primero, haces una consulta para saber los amigos.

Por ejemplo, imagina que el usuario "pepito" tiene como amigos a "carlitos" "laurita" y "cristinita".

"novedades" buscaria los amigos de pepito (y devolveria "carlitos", "laurita", "cristinita"). Y despues, busca novedades de carlitos, novedades de laurita, y novedades de cristinita...

¿Cual es el problema?

Que el orden que busca es el q te devuelve aqui:
Código PHP:
$resultadoamistades mysql_query("SELECT * FROM amigos WHERE (idnombreusuario = '$_SESSION[idusuario]' AND estado = '1')"); 
Así pues, primero buscara las novedades de cada amigo según el orden que tengan en la tabla amigos.

¿Es este el problema? :)
La cosa es que se muestre el comentario mas nuevo, y no según cuando se agregó a esa persona. Es decir, como lo dices lo que se mostraría seria siempre primero el de "carlitos" luego "laurita" y luego "cristinita" :)


Es decir si pongo...
Código PHP:
$resultadoamistades mysql_query("SELECT * FROM amigos WHERE (idnombreusuario = '$_SESSION[idusuario]' AND estado = '1') ORDER BY idpeticion DESC"); 
Se mostraria primero la ultima peticion.

Si pusiese:

Código PHP:
$resultadoamistades mysql_query("SELECT * FROM amigos WHERE (idnombreusuario = '$_SESSION[idusuario]' AND estado = '1') ORDER BY idusuariopedido DESC"); 
Se mostraría primero las novedades de un usuario y después de otro.

No se si entendí del todo bien, pero entendí eso :S
  #4 (permalink)  
Antiguo 14/02/2012, 09:52
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Problema sistema de novedades

No no, yo intentaba "explicarte" el pq te pasa....


No he tocado nada de código. Simplemente, intento q veas que es lo q pasa. Tú tienes puesto esto:
Código PHP:
$resultadoamistades mysql_query("SELECT * FROM amigos WHERE (idnombreusuario = '$_SESSION[idusuario]' AND estado = '1')"); 
while(
$filaamistad mysql_fetch_array($resultadoamistades)){ 
       
$resultado mysql_query("SELECT * FROM comentarios WHERE (estado = '1' AND idnombre = $filaamistad[idusuariopedido]) ORDER BY idcomentario DESC LIMIT 12"); 
        while(
$fila mysql_fetch_array($resultado)){ 
               
//blablabla
        
}

Tu primer bucle condiciona el segundo.

Es decir, primero pilla tus amigos con estado 1, y después, de cada uno de ellos, busca los comentarios. ¿Cual es el problema? Que busca los comentarios SEGUN el orden del primer bucle, que es la consulta que pilla tus amigos.

Por eso te lo ordena así.

Yo sólo quiero mostrarte el fallo, para que intentes solucionarlo. Y si no lo consigues, te ayudo
__________________
>> Eleazan's Source
>> @Eleazan
  #5 (permalink)  
Antiguo 14/02/2012, 10:05
Avatar de roal40  
Fecha de Ingreso: enero-2012
Mensajes: 61
Antigüedad: 12 años, 2 meses
Puntos: 4
Respuesta: Problema sistema de novedades

Cita:
Iniciado por Eleazan Ver Mensaje
No no, yo intentaba "explicarte" el pq te pasa....


No he tocado nada de código. Simplemente, intento q veas que es lo q pasa. Tú tienes puesto esto:
Código PHP:
$resultadoamistades mysql_query("SELECT * FROM amigos WHERE (idnombreusuario = '$_SESSION[idusuario]' AND estado = '1')"); 
while(
$filaamistad mysql_fetch_array($resultadoamistades)){ 
       
$resultado mysql_query("SELECT * FROM comentarios WHERE (estado = '1' AND idnombre = $filaamistad[idusuariopedido]) ORDER BY idcomentario DESC LIMIT 12"); 
        while(
$fila mysql_fetch_array($resultado)){ 
               
//blablabla
        
}

Tu primer bucle condiciona el segundo.

Es decir, primero pilla tus amigos con estado 1, y después, de cada uno de ellos, busca los comentarios. ¿Cual es el problema? Que busca los comentarios SEGUN el orden del primer bucle, que es la consulta que pilla tus amigos.

Por eso te lo ordena así.

Yo sólo quiero mostrarte el fallo, para que intentes solucionarlo. Y si no lo consigues, te ayudo
Ya más o menos me hacia a la idea de que ese era el fallo... pero como lo soluciono? me llevo comiendo la cabeza un dia y nada... :S

Un saludo
  #6 (permalink)  
Antiguo 14/02/2012, 10:08
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Problema sistema de novedades

Yo buscaria la solución por aqui: JOIN (no enlazo al manual oficial pq aqui me parece mejor explicado los distintos tipos ;) ). Aunq deberías bastarte con sólo el INNER JOIN, así conoces más sobre SQL ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #7 (permalink)  
Antiguo 14/02/2012, 10:34
Avatar de roal40  
Fecha de Ingreso: enero-2012
Mensajes: 61
Antigüedad: 12 años, 2 meses
Puntos: 4
Respuesta: Problema sistema de novedades

Me va a costar asimilar como usarlo bien pero supongo que lo acabaré sacando, gracias, nunca habia usado "JOIN"

Edito:

Este sería el codigo:

Código PHP:
$resultado mysql_query("SELECT * FROM comentarios c INNER JOIN amigos a ON (c.idnombre = a.idusuariopedido ) WHERE a.estado = 1 AND c.estado = 1 AND a.idnombreusuario  = $_SESSION[idusuario] ORDER BY c.idcomentario DESC"); 
 while(
$fila mysql_fetch_array($resultado)){ 

Última edición por roal40; 14/02/2012 a las 11:19

Etiquetas: mysql, novedades, sistema, 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 09:15.