Foros del Web » Programando para Internet » PHP »

¿Como filtrar resultados paginados de una BD?

Estas en el tema de ¿Como filtrar resultados paginados de una BD? en el foro de PHP en Foros del Web. Disculpar si no pongo esta consulta en lugar adecuado o cualquier cosa que no venga bien en el foto ya que soy nuevo en esto ...
  #1 (permalink)  
Antiguo 01/06/2011, 08:00
 
Fecha de Ingreso: marzo-2010
Mensajes: 8
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta ¿Como filtrar resultados paginados de una BD?

Disculpar si no pongo esta consulta en lugar adecuado o cualquier cosa que no venga bien en el foto ya que soy nuevo en esto de postear consultas.

1. Tengo esto para mostrar resultados en una consulta.

<?php
$numcolumnas = 3;
$consulta = mysql_query("SELECT * FROM FOTOGRAFIAS WHERE link <> '#' ORDER BY RAND() LIMIT 12");
$total_resultados = mysql_num_rows($consulta);
if ($total_resultados>0) {
echo "<tr><td align='center' colspan=\"$numcolumnas\"></td></tr>";
$i = 1;
while($fila = mysql_fetch_array($consulta)){
$resto = ($i % $numcolumnas);
if($resto == 1){ /*si es el primer elemento creamos una nueva fila*/
echo "<tr>";
}
echo "<td align='center' width='25%'><a href='".$fila['link']."'><img border='0' width='200px' height='160px' alt='imagenes' src='".$fila['logotipo']."'></img></a><br />".$fila['nombre']."</td>";/*mostramos el valor del campo especificado*/
if($resto == 0){/*cerramos la fila*/
echo "</tr>";
}
$i++;
}
if($resto != 0){/*Si en la última fila sobran columnas, creamos celdas vacías*/
for ($j = 0; $j < ($numcolumnas - $resto); $j++){
echo "<td></td>";
}
echo "</tr>";
}
}else{
echo "<tr><td>0 Anuncios en esta categor&iacute;a</td></tr> ";
}
?>

Ahora en la BD cada foto tiene un campo en la BD que la he llamado "VIP", la cual tiene un valor 0,1,2 según se le aplique manualmente,. La consulta es, ¿Podrias decirme que tengo que agregar para que la paginacion aparezcan aleatoriamente primero las que tengan valor VIP=0(si fueran 4 que salgan de forma aleatoria), despues VIP=1 y despues VIP=2 independientemente del valor 12 de max, es decir, si las del valor 0 fueran 15 que solo aparezcan 12 aleatorias cuyo campo VIP=0

Gracias de antemano
  #2 (permalink)  
Antiguo 01/06/2011, 08:16
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 8 meses
Puntos: 336
Respuesta: ¿Como filtrar resultados paginados de una BD?

Puedes usar union para juntar las 3 consultas filtrando ademas el numero de VIP:

$consulta = mysql_query("SELECT * FROM FOTOGRAFIAS
WHERE link <> '#' AND VIP=0
ORDER BY RAND() LIMIT 12
UNION
SELECT * FROM FOTOGRAFIAS
WHERE link <> '#' AND VIP=1
ORDER BY RAND() LIMIT 12
UNION
SELECT * FROM FOTOGRAFIAS
WHERE link <> '#' AND VIP=2
ORDER BY RAND() LIMIT 12");
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #3 (permalink)  
Antiguo 01/06/2011, 08:20
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 8 meses
Puntos: 336
Respuesta: ¿Como filtrar resultados paginados de una BD?

acabo de revisar y no se puede usar ORDER BY con UNION, por lo tanto te va a convenir hacer 3 consultas separadas:

Código PHP:
$consulta1 mysql_query("SELECT * FROM FOTOGRAFIAS
WHERE link <> '#' AND VIP=0
ORDER BY RAND() LIMIT 12"
);

$consulta2 mysql_query("SELECT * FROM FOTOGRAFIAS
WHERE link <> '#' AND VIP=1
ORDER BY RAND() LIMIT 12"
);

$consulta3 mysql_query("SELECT * FROM FOTOGRAFIAS
WHERE link <> '#' AND VIP=2
ORDER BY RAND() LIMIT 12"
); 
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #4 (permalink)  
Antiguo 01/06/2011, 08:27
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 8 meses
Puntos: 336
Respuesta: ¿Como filtrar resultados paginados de una BD?

también puedes agruparlas en ():

$consulta = mysql_query("(SELECT * FROM FOTOGRAFIAS
WHERE link <> '#' AND VIP=0
ORDER BY RAND() LIMIT 12)
UNION
(SELECT * FROM FOTOGRAFIAS
WHERE link <> '#' AND VIP=1
ORDER BY RAND() LIMIT 12)
UNION
(SELECT * FROM FOTOGRAFIAS
WHERE link <> '#' AND VIP=2
ORDER BY RAND() LIMIT 12)");

lamento el triple post, pero no pude editar la anterior!!!
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
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 21:58.