Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal
  • 0
boreas

Optimizar consulta de recomendación

Question

Hola, ya que Isidro sigue desaparecido en alguna isla del caribe y nadie sabe su paradero abro este tema para ver si entre todos podemos resolver esto. (aclaro nuevamente que no soy programador, soy un apasionado).

 

La función en cuestión es la que comparte los posts y el problema es el siguiente. Si yo tengo un par de seguidores puedo compartir un post en cuestión de segundos, todo bien, pero si tengo por ejemplo 800 tarda un par de minutos lo cuál no está bueno ya que además sobrecarga el servidor de tantas consultas...

 

/**
     * @name setSpam
     * @access public
     * @param none
     * @return string
     * @info ESTA FUNCION ES PARA REALIZAR RECOMENDACIONES
	*/
	public function setSpam(){
		global $tsCore, $tsUser, $tsActividad;
		//
		$postid = $_POST['postid'];
        // TIENE SEGUIDORES?
		$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT follow_id FROM u_follows WHERE f_id = \''.$tsUser->uid.'\'  AND f_type = \'1\' LIMIT 1');
        $seguidores = db_exec('num_rows', $query);
        // YA LO HA RECOMENDADO?
		$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT follow_id FROM u_follows WHERE f_id = \''.(int)$postid.'\' AND f_user = \''.$tsUser->uid.'\' AND f_type = \'3\' LIMIT 1');
        $recomendado = db_exec('num_rows', $query);
        
        if($seguidores < 1) return '0-Debes tener al menos un seguidor';
        if($recomendado > 0) return '0-No puedes recomendar el mismo post m&aacute;s de una vez.'; 
		//
		$query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT post_user FROM p_posts WHERE post_id = \''.(int)$postid.'\' LIMIT 1');
		$data = db_exec('fetch_assoc', $query);
		
		//
		if($tsUser->uid != $data['post_user']){
            // GUARDAMOS EN FOLLOWS PUES ES LA RECOMENDACION PARA SU SEGUIDORES! xD
			db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO u_follows (f_id, f_user, f_type, f_date) VALUES (\''.(int)$postid.'\', \''.$tsUser->uid.'\', \'3\', \''.time().'\') ');
			// NOTIFICAR
			if($this->setFollowNotificacion(6, 1, $tsUser->uid, $postid)) {
                $tsActividad->setActividad(4, $postid);
                return '1-La recomendaci&oacute;n fue enviada.';
			}
		} else return '0-No puedes recomendar tus posts.';
	}

¿Alguna idea?

  • Like 1

Share this post


Link to post
Share on other sites

19 answers to this question

Recommended Posts

  • 0
hace 2 horas, jorge51 dijo:

Esto funciona perfecto , se quedaba un rato largo pensando

Cuando agregas un post pasa lo mismo , con muchos seguidores se hace casi imposible publicar un post ..

Creo que el problema es similar al que solucionaste 

Esta linea esta en c.post

// AGREGAR AL MONITOR DE LOS USUARIOS QUE ME SIGUEN
                // $tsMonitor->setFollowNotificacion(5, 1, $tsUser->uid, $postID);

¿como se podria mejorar ? Gracias

Es exactamente lo mismo pero cambiando el tipo de notificación que en setSpam() era 6 y al publicar un post es 5. Básicamente tienes que sustituir esa función que comentas por:

db_exec(array(__FILE__, __LINE__), 'query', "
INSERT INTO u_monitor (user_id, obj_user, obj_uno, obj_dos, obj_tres, not_type, not_date)
SELECT f_user, '{$tsUser->uid}', '{$postID}', 0, 0, 5, ".time()."
FROM u_follows
WHERE f_id = '{$tsUser->uid}' AND f_type = 1
");

 

  • Thanks 2

Share this post


Link to post
Share on other sites
  • 0
hace 6 horas, Rhuan dijo:

Es exactamente lo mismo pero cambiando el tipo de notificación que en setSpam() era 6 y al publicar un post es 5. Básicamente tienes que sustituir esa función que comentas por:

db_exec(array(__FILE__, __LINE__), 'query', "
INSERT INTO u_monitor (user_id, obj_user, obj_uno, obj_dos, obj_tres, not_type, not_date)
SELECT f_user, '{$tsUser->uid}', '{$postID}', 0, 0, 5, ".time()."
FROM u_follows
WHERE f_id = '{$tsUser->uid}' AND f_type = 1
");

 

Genio :)  , funciona perfecto , y esto mismo aplicaría para las demás notificaciones masivas , como fotos , cambios de estado  y comunidades .

Es una gran mejora , muchas gracias 

  • Thanks 1

Share this post


Link to post
Share on other sites
  • 0
On 3/2/2020 at 20:52, Rhuan dijo:

Es exactamente lo mismo pero cambiando el tipo de notificación que en setSpam() era 6 y al publicar un post es 5. Básicamente tienes que sustituir esa función que comentas por:

db_exec(array(__FILE__, __LINE__), 'query', "
INSERT INTO u_monitor (user_id, obj_user, obj_uno, obj_dos, obj_tres, not_type, not_date)
SELECT f_user, '{$tsUser->uid}', '{$postID}', 0, 0, 5, ".time()."
FROM u_follows
WHERE f_id = '{$tsUser->uid}' AND f_type = 1
");

 

Te molesto nuevamente , si te rompo los huevos me lo decis y no te jodo mas 

otra de las notis que sobrecargan es de comunidades cuando se crea un nuevo tema 

la funcion es esta 

$this->setFollowNotificacion(50, 4, $tsUser->uid, $comid, $temaid);   

y lo puse asi 

 

 

               db_exec(array(__FILE__, __LINE__), 'query', "
                INSERT INTO u_monitor (user_id, obj_user, obj_uno, obj_dos, obj_tres, not_type, not_date)
                SELECT f_user, '{$tsUser->uid}', '{$temaid}', 0, 0, 50, ".time()."
                FROM u_follows
                WHERE f_id = '{$tsUser->uid}' AND f_type = 1
                ");

     funciona bien pero me quedo afuera $comid  y no se como ponerlo , la noti sale bien con el tema agregado pero no muestra en que comunidad se agrego 

 

Share this post


Link to post
Share on other sites
  • 0
On 5/2/2020 at 17:45, jorge51 dijo:

Te molesto nuevamente , si te rompo los huevos me lo decis y no te jodo mas 

otra de las notis que sobrecargan es de comunidades cuando se crea un nuevo tema 

la funcion es esta 

$this->setFollowNotificacion(50, 4, $tsUser->uid, $comid, $temaid);   

y lo puse asi 

 


 

               db_exec(array(__FILE__, __LINE__), 'query', "
                INSERT INTO u_monitor (user_id, obj_user, obj_uno, obj_dos, obj_tres, not_type, not_date)
                SELECT f_user, '{$tsUser->uid}', '{$temaid}', 0, 0, 50, ".time()."
                FROM u_follows
                WHERE f_id = '{$tsUser->uid}' AND f_type = 1
                ");

     funciona bien pero me quedo afuera $comid  y no se como ponerlo , la noti sale bien con el tema agregado pero no muestra en que comunidad se agrego 

 

En este caso es un poco diferente ya que además del tipo de notificación cambia también el tipo de follow. En este caso es 4 y por defecto en el script no existe ese tipo de follow por lo que no sabría decirte exactamente como es. Copia y pega aquí el código de la función setFollowNotifaction que esta en c.monitor.php para que pueda ver cómo debería ser.

 

Y tranquilo que no molestas xD

Share this post


Link to post
Share on other sites
  • 0
On 6/2/2020 at 18:46, Rhuan dijo:

En este caso es un poco diferente ya que además del tipo de notificación cambia también el tipo de follow. En este caso es 4 y por defecto en el script no existe ese tipo de follow por lo que no sabría decirte exactamente como es. Copia y pega aquí el código de la función setFollowNotifaction que esta en c.monitor.php para que pueda ver cómo debería ser.

 

Y tranquilo que no molestas xD

Te paso lo que esta en c.comunidades sobre esta funcion 

 

// Notificar a los seguidores  de la comunidad, tema
    function setFollowNotificacion($notType, $f_type, $user_id, $obj_uno, $obj_dos = 0, $excluir){
        global $tsCore, $tsMonitor;
        # A todos los seguidores
        if($f_type == 1) $obj_uno = $user_id;
        # Quienes sigan la comunidad/tema        
        $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT f_user FROM u_follows WHERE f_id = \''.(int)$obj_uno.'\' AND f_type = \''.(int)$f_type.'\'');
        $data = result_array($query);        
        //
        foreach($data as $key => $val){
            if(!in_array($val['f_user'],$excluir)){
                $tsMonitor->setNotificacion($notType, $val['f_user'], $user_id, $obj_dos);
            }
        }
        //
        return true;
    }

Share this post


Link to post
Share on other sites
  • 0
On 8/2/2020 at 17:37, jorge51 dijo:

Te paso lo que esta en c.comunidades sobre esta funcion 

 

// Notificar a los seguidores  de la comunidad, tema
    function setFollowNotificacion($notType, $f_type, $user_id, $obj_uno, $obj_dos = 0, $excluir){
        global $tsCore, $tsMonitor;
        # A todos los seguidores
        if($f_type == 1) $obj_uno = $user_id;
        # Quienes sigan la comunidad/tema        
        $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT f_user FROM u_follows WHERE f_id = \''.(int)$obj_uno.'\' AND f_type = \''.(int)$f_type.'\'');
        $data = result_array($query);        
        //
        foreach($data as $key => $val){
            if(!in_array($val['f_user'],$excluir)){
                $tsMonitor->setNotificacion($notType, $val['f_user'], $user_id, $obj_dos);
            }
        }
        //
        return true;
    }

Pues quedaría así:

db_exec(array(__FILE__, __LINE__), 'query', "
INSERT INTO u_monitor (user_id, obj_user, obj_uno, obj_dos, obj_tres, not_type, not_date)
SELECT f_user, '{$tsUser->uid}', '{$temaid}', 0, 0, 50, ".time()."
FROM u_follows
WHERE f_id = '{$comid}' AND f_type = 4
");

 

  • Thanks 1

Share this post


Link to post
Share on other sites
  • 0
On 4/2/2020 at 9:07, camila dijo:

Boreas me pondrias esa modificacion en mi web por favor?

Un poco tarde pero aún queres que te ponga la modificación?

Share this post


Link to post
Share on other sites
  • 0
hace 6 horas, boreas dijo:

Un poco tarde pero aún queres que te ponga la modificación?

Si por favor para poder crear post sin tardar 2 minutos por post...gracias como siempre boreas

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Patrocinador



  • ×