Foros del Web » Programando para Internet » PHP »

MySQL mostrar 10 resultados por 7 dias, y pasado el septimo, se renuevan

Estas en el tema de MySQL mostrar 10 resultados por 7 dias, y pasado el septimo, se renuevan en el foro de PHP en Foros del Web. hola, simplemente quiero preguntar como se hace para mostrar una consulta, pero que esa consulta se renueve cada 7 dias con una condicion, que se ...
  #1 (permalink)  
Antiguo 05/06/2009, 22:18
 
Fecha de Ingreso: enero-2009
Mensajes: 34
Antigüedad: 10 años, 10 meses
Puntos: 1
MySQL mostrar 10 resultados por 7 dias, y pasado el septimo, se renuevan

hola, simplemente quiero preguntar como se hace para mostrar una consulta, pero que esa consulta se renueve cada 7 dias con una condicion, que se renueve pero con los posts con mas puntos, ahora les pego el codigo y les explico que tengo spirate en mi web, es decir el clon de taringa, y bueno, quiero hacer lo que hace taringa de renovar los post con mas puntos gradualmente, aunque lo renueva cada dia, como para darles una idea se los digo nomas:

Código PHP:
$request db_query("

SELECT m.subject, m.ID_TOPIC, t.ID_TOPIC, t.puntos

FROM (smf_topics AS t, smf_messages AS m)

WHERE t.ID_TOPIC = m.ID_TOPIC

ORDER BY t.puntos DESC

LIMIT 10 "
__FILE____LINE__);

    
$context['postporpuntos'] = array();

    while (
$row mysql_fetch_assoc($request))

        
$context['postporpuntos'][] = array(

            
'titulo' => $row['subject'],

            
'puntos' => $row['puntos'],

            
'id' => $row['ID_TOPIC'],

            );

    
mysql_free_result($request); 
Código HTML:
<div class="img_aletat">

<div class="box_title" style="width: 160px;"><div class="box_txt img_aletat">User de la semana</div>

<div class="box_rss"><img  src="/Themes/default/images/blank.gif" style="width: 16px; height: 16px;" border="0"></div></div><div class="box_icono2">';

foreach ($context['top_posters_week'] as $poster)

echo '<center><font size="1">', $poster['link'], ' (', $poster['num_posts'], ')</font></center>';

echo'</div></div> 
Código PHP:
echo'<div class="act_comments">

<div class="box_title" style="width: 363px;"><div class="box_txt ultimos_comments">Posts con m&aacute;s puntos</div>

<div class="box_rss"><img  src="/Themes/default/images/blank.gif" style="width: 16px; height: 16px;" border="0"></div></div><div   align="left" class="windowbg" style="width: 353px; padding:4px;margin-bottom:8px;font-size:11px;">'
;

foreach (
$context['postporpuntos'] as $ppp){



$tamano 50// tamaño máximo en carácteres, los espacios también cuentan

$contador 0;

 

$arrayTexto split(' ',$ppp['titulo']);

$ppp['titulo'] = '';

 while(
$tamano >= strlen($ppp['titulo']) + strlen($arrayTexto[$contador])){

    
$ppp['titulo'] .= ' '.$arrayTexto[$contador];

    
$contador++;

}



echo 
'<b class="size11">'.$contar6++.'- </b><a title="'$ppp['titulo'], '" href="?topic='$ppp['id'], '">'$ppp['titulo'], '</a> ('$ppp['puntos'], ' pts)<br>

'
;}

echo
'</div></div>'
espero que me entiendan :$
  #2 (permalink)  
Antiguo 11/09/2009, 21:29
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 10 años, 3 meses
Puntos: 214
Respuesta: MySQL mostrar 10 resultados por 7 dias, y pasado el septimo, se renuevan

Hola
Pues hay varias maneras de efectuar eso, pero creería que la más sencilla es que agregues un campo a la tabla llamado "orden", y que agregues a tu consulta ese campo, es decir algo asi:

Código PHP:
SELECT m.subjectm.ID_TOPICt.ID_TOPICt.puntos

FROM 
(smf_topics AS tsmf_messages AS m)

WHERE t.ID_TOPIC m.ID_TOPIC

AND t.orden 1 ORDER BY t.puntos DESC

LIMIT 10 
Donde 1 es el valor que tomarian los 10 primeros registros, y obviamente para esto necesitas ya sea un procedimiento almacenado o un script de php aparte que se encargue de hacer esta tarea

El procedimiento almacenado conlleva saber del tema, y no se si lo manejes, por ende creería que tal vez lo más indicado para vos sería hacer un archivo php, en donde hagas lo siguiente:

1. El campo orden de los registros lo pongas en 0 u otro valor diferente de uno (con un update a los que tengas en 1, pues los demás ya deben tener el valor 0 o el que pongas por defecto en ese campo)
2. Luego del paso 1, traigas la consulta anterior que tenías, es decir esta
Código PHP:
SELECT m.subjectm.ID_TOPICt.ID_TOPICt.puntos

FROM 
(smf_topics AS tsmf_messages AS m)

WHERE t.ID_TOPIC m.ID_TOPIC

ORDER BY t
.puntos DESC

LIMIT 10 
3. Recorriendo los registros resultantes de esta consulta, hacer un update a cada uno de ellos en su campo orden y le pones el valor 1


Y este archivo php nuevo tendrías que ejecutarlo semanalmente, o bueno, crear una tarea programada en windows o un cron job en linux (no se cual manejes) que se encargue de hacer eso semanalmente

Y ya con eso, semanalmente cambiarian los resultados que necesitas
Espero te sirva
Saludos
  #3 (permalink)  
Antiguo 11/09/2009, 21:52
 
Fecha de Ingreso: julio-2009
Ubicación: En mi casa
Mensajes: 48
Antigüedad: 10 años, 5 meses
Puntos: 3
Respuesta: MySQL mostrar 10 resultados por 7 dias, y pasado el septimo, se renuevan

la solucion esta bien mortiprogramador, pero me imagino que si quiers algo como taringa, eso tendria que hacerse del lado del servidor no?, y seria dificil instalar esos programas en un servidor con restricciones. Entonces creo (no tengo mucha experiencia) que pueda haber dos soluciones faciles:
1- Guarda la fecha donde se efectue la consulta, y sumale 7 dias... y se vuelva a ejecutar la consulta.
2- Busca aqui en forosdelweb en la seccion JavaScript alguien que te ayude con esto...xD hay un 90% de posibilidaddes de que te ayuden con esto que necesitas.

Yo me iria por la primera, guardar la fecha como una constante en el archivo de la consulta y sumarle 7 dias.. y que la consulta se vuelva a repetir solo cuando la constante fecha sea la misma que la fecha del servidor.

:D
att: g3rz0n
  #4 (permalink)  
Antiguo 11/09/2009, 22:08
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 10 años, 3 meses
Puntos: 214
Respuesta: MySQL mostrar 10 resultados por 7 dias, y pasado el septimo, se renuevan

Hola
Bueno, pues yo le estaba dando respuesta a pidoayudaenphp, y lo que dices de la constante, no es solución pues eso te funcionaría solo en la primera semana que pase, pero luego ya no lo haría más, a menos obviamente que cambies la constante manualmente, y por otro lado si esas noticias que ya pasaron tienen más puntos que las actuales, el derecho del asunto es que estas seguirían punteando precisamente por los puntos y esto se perdería con la solución que propones

Por eso es que yo propongo que se haga un script de php aparte y con el nuevo campo, el cual se corre sin problema y pues los hosting generalmente tienen en el panel de control asistentes que ayudan a programar estas tareas
Y si no esta esto, siempre esta la opción humana de correr el script cada semana
Pero pues cada cual tiene su modo de matar las pulgas!!!
Saludos
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 19:46.