Foros del Web » Programando para Internet » PHP »

random de 2 consultas a bd sin repetirse

Estas en el tema de random de 2 consultas a bd sin repetirse en el foro de PHP en Foros del Web. Hola a todos, Pues tengo una pagina con una columna en la izquierda y ahi tengo banners seleccionados al azar con ORDER BY RAND() Ahora ...
  #1 (permalink)  
Antiguo 08/05/2012, 13:17
 
Fecha de Ingreso: abril-2003
Ubicación: Guatemala
Mensajes: 93
Antigüedad: 21 años
Puntos: 1
Busqueda random de 2 consultas a bd sin repetirse

Hola a todos,

Pues tengo una pagina con una columna en la izquierda y ahi tengo banners seleccionados al azar con ORDER BY RAND()

Ahora estoy poniendo banners en la derecha y tambien los quiero al azar pero sin que se repitan con los de la izquierda.

He tratado un poco de todo pero nada, aun estoy aprendiendo el tema de PHP.
La consulta viene de una base de datos y las imagenes de una carpeta..

solo quiero sacar los id´s de la las imagenes del lado izquierdo y poner un NOT IN en las del derecho.

este es el codigo que uso

Código PHP:
$sql = ("SELECT id, archivo_nombre, titul, registro, link FROM Banners ORDER BY RAND() LIMIT 0, 2");
        
  
$consulta mysql_query($sql) or die ("No se pudo ejecutar la consulta");
  while(
$fila mysql_fetch_array($consulta)){  
  
    
$imagen $fila['archivo_nombre'];
    
$link $fila['link']; 
    
$titul $fila['titul']; 
    
$registro $fila['registro']; 
    if(
$fila["link"] == ""){ 
    echo 
"<div style='margin-top:5px; style='z-index:-3000''><img src=\"banners/$imagen\" width='140' height='179' border='0'></div>";
    } else { 
     
echo 
"<div style='margin-top:5px;'> <a href=\"$link\"><img src=\"banners/$imagen\" width='140' height='179' border='0'></a></div>";/*mostramos el valor del campo especificado*/  
}} 
Si alguien me puede ayudar, le agradeceria de antemano,

Saludos,

Sicuesn
  #2 (permalink)  
Antiguo 08/05/2012, 13:41
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: random de 2 consultas a bd sin repetirse

Acumula los id que te devuelve la consulta en un vector por ejemplo $ids y despues en la otra consulta haces

Código PHP:
Ver original
  1. $sql = "..... WHERE id NOT IN(" . join($ids) . ") ORDER BY RAND()";

y ahi te va a devolver otros que no sean los que esten en $ids, que son los que estaban en la otra consulta.
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #3 (permalink)  
Antiguo 08/05/2012, 14:12
 
Fecha de Ingreso: abril-2003
Ubicación: Guatemala
Mensajes: 93
Antigüedad: 21 años
Puntos: 1
Respuesta: random de 2 consultas a bd sin repetirse

Si es exactamente lo que quiero hacer pero no se como...

si me dieras algunos pasos...
  #4 (permalink)  
Antiguo 08/05/2012, 14:25
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: random de 2 consultas a bd sin repetirse

Si tu codigo anterior funciona bien podes hacer lo siguiente:

Código PHP:
Ver original
  1. $sql = ("SELECT id, archivo_nombre, titul, registro, link FROM Banners ORDER BY RAND() LIMIT 0, 2");
  2. $consulta = mysql_query($sql) or die ("No se pudo ejecutar la consulta");
  3.  
  4. while($fila = mysql_fetch_array($consulta)) {  
  5.     $ids[] = $fila['id']; // Vector con los id de los banne que ya selecciono y que se va a utilizar para la segunda consulta
  6.     $imagen = $fila['archivo_nombre'];
  7.     $link = $fila['link'];  
  8.     $titul = $fila['titul'];  
  9.     $registro = $fila['registro'];  
  10.     if($fila["link"] == ""){  
  11.         echo "<div style='margin-top:5px; style='z-index:-3000''><img src=\"banners/$imagen\" width='140' height='179' border='0'></div>";
  12.     } else {        
  13.         echo "<div style='margin-top:5px;'> <a href=\"$link\"><img src=\"banners/$imagen\" width='140' height='179' border='0'></a></div>";/*mostramos el valor del campo especificado*/  
  14.     }
  15. }

y ahora haces lo siguiente;

Código PHP:
Ver original
  1. // Al tener $ids[] de la conuslta anterior haces lo siguiente
  2. $sql = ("SELECT id, archivo_nombre, titul, registro, link FROM Banners WHERE id NOT IN (" . join(',', $ids) . ") ORDER BY RAND() LIMIT 0, 2");
  3. $consulta = mysql_query($sql) or die ("No se pudo ejecutar la consulta");
  4.  
  5. while($fila = mysql_fetch_array($consulta)) {  
  6.     $imagen = $fila['archivo_nombre'];
  7.     $link = $fila['link'];  
  8.     $titul = $fila['titul'];  
  9.     $registro = $fila['registro'];  
  10.     if($fila["link"] == ""){  
  11.         echo "<div style='margin-top:5px; style='z-index:-3000''><img src=\"banners/$imagen\" width='140' height='179' border='0'></div>";
  12.     } else {        
  13.         echo "<div style='margin-top:5px;'> <a href=\"$link\"><img src=\"banners/$imagen\" width='140' height='179' border='0'></a></div>";/*mostramos el valor del campo especificado*/  
  14.     }
  15. }

Fijate si te sirve
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #5 (permalink)  
Antiguo 08/05/2012, 14:28
 
Fecha de Ingreso: abril-2003
Ubicación: Guatemala
Mensajes: 93
Antigüedad: 21 años
Puntos: 1
Respuesta: random de 2 consultas a bd sin repetirse

Ah ok, los vectores son arrays.
Voy a probar y te cuento... te agradesco mucho

Saludos
  #6 (permalink)  
Antiguo 08/05/2012, 14:39
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: random de 2 consultas a bd sin repetirse

Jajajajaja, si, es que me quedo asi de la facu, perdona, un array es un arreglo y un arreglo es un vector, por ende un array es un vector :D
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com

Etiquetas: bd, imagenes, mysql, random, registro, sql
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 23:11.