Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/02/2011, 04:51
Avatar de bNd170
bNd170
 
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: Mostrar registros aleatorios sin que se repitan

Lo unico que se me ocurre es que vayas guardando en una variable las IDs de los productos que hayas mostrado ya separados por comas y que al hacer la consulta le metas una id NOT IN ($idsmostradas).
Al ser paginacion, define un numero de articulos por pagina, que las ID si avanza de pagina te las de la DB pero si vuelve hacia atras le metes un explode a la variable con IDs.

Es decir:
Código PHP:
Ver original
  1. $total_por_pag = 50;
  2. if(isset($_REQUEST['idsmostradas'])) {
  3.    $array_de_ids = explode(',',$_REQUEST['idsmostradas']);
  4.    $total_registros = count($array_de_ids);
  5.    if($total_por_pag*$pag_actual)<$total_registros) { // Es una pagina ya mostrada
  6.       $filtro_SQL = 'AND id IN (';
  7.       for($x=$total_por_pag*$pag_actual;$x<=$total_por_pag*$pag_actual+$total_por_pag;$x++) {
  8.           $filtro_SQL .= $array_de_ids[$x].',';
  9.       }
  10.       $filtro_SQL = substr($mostrar_ids,0,strlen($mostrar_ids)-1);
  11.       $filtro_SQL .= ')';
  12.    } else { // Es una página nueva
  13.       $filtro_SQL = 'AND id NOT IN ('.$_REQUEST['idsmostradas'].')';
  14.    }
  15. } else
  16.   $filtro_SQL = '';
  17.  
  18. $sql = 'SELECT * FROM tabla WHERE tusfiltros '.$filtro_SQL.''
Algo asi :)

Como sujerencia: Cuando concatenes en PHP; si vas hacerlo bien usa comillas simples, el parser si encuentra comillas dobles tarda más ya que busca dentro del string posibles variables de PHP que interpretar, con lo cual tarda mas, usando simples, le indicas al parser que lo que hay en ese string es texto plano y si quieres mostras variables concatenas como bien haces.

Un saludo

Última edición por bNd170; 16/02/2011 a las 05:07