Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/02/2008, 10:06
Avatar de ldp
ldp
 
Fecha de Ingreso: marzo-2005
Ubicación: Por fin, en mi nueva casa!
Mensajes: 617
Antigüedad: 19 años, 2 meses
Puntos: 3
Exclamación Necesito ayuda con el sistema de votación de mi web

El sistema de votación de mi web provoca el aumento de consumo de CPU de mi hosting.

El problema viene cuando intento mostrar la lista ordenada por votos, mientras que si está ordenada por nombre o fecha no hay problema.

Aquí dejo una captura de la BD:


rate_id, rate_table y rate_itemid definen el item que se votó (rate_id es el ID en esta tabla, rate_table es la tabla a la que pertenece el item y rate_itemid el ID que tiene en la tabla a la que pertenece).
rate_rating es el total de la suma de los votos (se vota del 1 al 10)
rate_votes es el total de votos (en este caso 2 personas han votado este item)
rate_voters son los ID de los usuarios que han votado (para que sólo puedan votar 1 vez)

No sé porque da problemas cuando lo único que tiene que hacer es dividir el campo "rate_rating" entre "rate_votes" y ordenarlo descendente.

Alguna idea?

EDITO: El CMS es e107. Si no me equivoco, este es el código que maneja los votos:

Código:
	function getrating($table, $id, $userid=FALSE) {
		//userid	: boolean, get rating for a single user, or get general total rating of the item

		$table = preg_replace('/\W/', '', $table);
		$id = intval($id);

		$sql = new db;
		if (!$sql->db_Select("rate", "*", "rate_table = '{$table}' AND rate_itemid = '{$id}' ")) {
			return FALSE;
		} else {
			$rowgr = $sql->db_Fetch();
			if($userid==TRUE){
				$rating = "";
				$rateusers = explode(".", $rowgr['rate_voters']);
				for($i=0;$i<count($rateusers);$i++){
					if(strpos($rateusers[$i], chr(1))){
						$rateuserinfo[$i] = explode(chr(1), $rateusers[$i]);
						if($userid == $rateuserinfo[$i][0]){
							$rating[0] = 0;						//number of votes, not relevant in users rating
							$rating[1] = $rateuserinfo[$i][1];	//the rating by this user
							$rating[2] = 0;						//no remainder is present, because we have a single users rating
							break;
						}
					}else{
						$rating[0] = 0;		//number of votes, not relevant in users rating
						$rating[1] = 0;		//the rating by this user
						$rating[2] = 0;		//no remainder is present, because we have a single users rating
					}
				}
			}else{
				$rating[0] = $rowgr['rate_votes']; // $rating[0] == number of votes
				$tmp = $rowgr['rate_rating'] / $rowgr['rate_votes'];
				$tmp = (strpos($tmp,",")) ? explode(",", $tmp) : explode(".", $tmp);
				$rating[1] = $tmp[0];
				if(isset($tmp[1])){
					$rating[2] = substr($tmp[1], 0, 1);
				}else{
					$rating[2] = "0";
				}
			}

			return $rating;
		}
	}

Última edición por ldp; 23/02/2008 a las 10:41