Foros del Web » Programando para Internet » PHP »

4 valores aleatorios y a su vez 3+1

Estas en el tema de 4 valores aleatorios y a su vez 3+1 en el foro de PHP en Foros del Web. Hola amigos!! Tengo una ligera duda que no me permite avanzar en el desarrollo de una aplicación. Tengo una tabla con 3 campos, ID, nombre, ...
  #1 (permalink)  
Antiguo 01/12/2012, 16:34
 
Fecha de Ingreso: agosto-2012
Ubicación: Zafra
Mensajes: 25
Antigüedad: 12 años, 3 meses
Puntos: 2
Pregunta 4 valores aleatorios y a su vez 3+1

Hola amigos!!

Tengo una ligera duda que no me permite avanzar en el desarrollo de una aplicación. Tengo una tabla con 3 campos, ID, nombre, y valor.

Tengo unos 20 registros aproximadamente y los valores son '1' ó '0' para cada uno de ellos. Lo que pretendo hacer es lo siguiente:

Quiero sacar 4 registros aleatorios de la tabla, hasta ahí no tengo problemas. El problema me surge cuando quiero sacar 4 registros, pero queriendo que 3 de ellos tengan por valor 0, y uno de ellos con valor 1.

Puedo generar 2 sentencias sql, una para el valor 1, y otra para los valores 0. El problema es que luego también quiero mostrarlos de manera aleatoria, de manera que me de, 1-0-0-0, 0-0-0-1,0-1-0-0 ó 0-0-1-0.

He pensado varias maneras de hacerlo pero no consigo hacerlo con ninguna de ellas, así que por eso acudo a vosotros. ¿Alguna idea? Gracias de antemano...

El tema lo he puesto en PHP ya que desde la sentencia SQL lo veía bastante imposible, y he creído que habrá alguna manera de hacerlo en PHP.

Última edición por Javivo; 01/12/2012 a las 16:58 Razón: Lapsus mentales..
  #2 (permalink)  
Antiguo 01/12/2012, 18:54
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 5 meses
Puntos: 181
Respuesta: 4 valores aleatorios y a su vez 3+1

Cita:
Puedo generar 2 sentencias sql, una para el valor 1, y otra para los valores 0. El problema es que luego también quiero mostrarlos de manera aleatoria, de manera que me de, 1-0-0-0, 0-0-0-1,0-1-0-0 ó 0-0-1-0.
La verdad no entiendo esta parte. Tu mismo te estas respondiendo con dos sentencias sql lo podrias hacer perfectamente. No entiendo lo segundo que es eso de mostrarlos de manera aleatoria.
__________________
Blog de humor http://elcuasatar.net63.net/
  #3 (permalink)  
Antiguo 01/12/2012, 20:27
 
Fecha de Ingreso: agosto-2012
Ubicación: Zafra
Mensajes: 25
Antigüedad: 12 años, 3 meses
Puntos: 2
Respuesta: 4 valores aleatorios y a su vez 3+1

Lo que quiero decir, es que me devolvería 4 valores. Pero tras cada sentencia sql va un ciclo while, y dependiendo de cual ponga primero, será el tipo de valor que me devuelva.
Ejemplo:
Código PHP:
Ver original
  1. <?php
  2. $sql = mysql_query("dame 1 registro aleatorio con valor 1");
  3. while($r=mysql_fetch_array($sql))
  4.    {
  5.     echo $r["registro"];
  6.    }
  7. $sql2 = mysql_query("dame 3 registros aleatorios con valor 0");
  8. while($r2=mysql_fetch_array($sql))
  9.    {
  10.     echo $r2["registro"];
  11.    }
  12. ?>

Haciéndolo de esa manera, me va a devolver como primer registro, el que tenga valor 1. Y después los 3 registros con valor 0. Si lo hago al revés me hará lo opuesto.

Lo que yo quiero es mostrarlos de manera aleatoria también cuando el usuario vea el resultado. De manera que me de dos registros con valor 0, el siguiente con 1 y el siguiente con 0, o en cualquier otro orden, pero deben ser aleatorios. De ahí lo que he puesto de 1-0-0-0, 0-0-0-1,0-1-0-0 ó 0-0-1-0. Ya que son las alternativas que deberían barajarse puesto que no hay más.

Espero haberme explicado mejor esta vez ^^. Y gracias por contestar
  #4 (permalink)  
Antiguo 01/12/2012, 20:39
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 5 meses
Puntos: 181
Respuesta: 4 valores aleatorios y a su vez 3+1

Listo ya me quedo mas claro. Pues no creo que sea muy dificil hacerlo. En lugar de hacer los echo simplemente guardas los valores en dos arreglos (uno del 1 y otro del cero) y con una función como array_merge podrias unir los dos arreglos en uno solo.

Por ultimo podrias usar array rand para que aleatoriamente saque los resultados del arreglo que formaste anteriormente.

Con esto creo que solucionarias tu problema. Si tienes dudas busca el manual de PHP para el uso de las funciones.
__________________
Blog de humor http://elcuasatar.net63.net/
  #5 (permalink)  
Antiguo 01/12/2012, 20:48
 
Fecha de Ingreso: agosto-2012
Ubicación: Zafra
Mensajes: 25
Antigüedad: 12 años, 3 meses
Puntos: 2
Respuesta: 4 valores aleatorios y a su vez 3+1

Muchas gracias amigo! Había pensado en crear 2 arrays con los resultados pero no sabía como hacer un random de ambos arrays, no me había parado a pensar en unir 2 arrays.. obviamente desconocía la función array_merge.

Otra variable que estaba considerando también era la de crear una tercera tabla temporal en la base de datos, donde se guardasen los 4 registros y de ahí mostrar los 4 de manera aleatoria, pero con esta función ahorro bastante más tiempo. Gracias!!
  #6 (permalink)  
Antiguo 01/12/2012, 20:58
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 5 meses
Puntos: 181
Respuesta: 4 valores aleatorios y a su vez 3+1

Pues me alegra haber sido de ayuda. Cuando tengas dudas busca funciones de array en PHP.

http://php.net/manual/es/ref.array.php

De hecho yo no me las se de memoria (para darte la solución mire el manual porque no recordaba el nombre de unir los dos arreglos), simplemente pienso que necesito y seguro con las funciones que existen uno puede crear su propia solución.

p.s. Estas en España? Pero si es de madrugada y con el frío de otoño, madre mia que si tienes agallas para trabajar a esta hora.
__________________
Blog de humor http://elcuasatar.net63.net/
  #7 (permalink)  
Antiguo 01/12/2012, 21:09
 
Fecha de Ingreso: agosto-2012
Ubicación: Zafra
Mensajes: 25
Antigüedad: 12 años, 3 meses
Puntos: 2
Respuesta: 4 valores aleatorios y a su vez 3+1

Al manual le había echado un vistazo pero parece que se me ha pasado alguna que otra función...

Ya ves, de noche trabajo mejor, hay silencio, Además, teniendo la mente ocupada.. el frío es lo de menos, :D

Etiquetas: ciclos, sql, aleatoria
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 12:52.