Hola, buenas noches. Llevo un tiempo siguiendo esta comunidad. Me paso mucho por los subforos de php, jquery, android y java, y no he podido resistirme a publicar una duda. Sin embargo, antes de explicarme y de preguntar, quiero avisar de que, a ser posible, en vez de darme alguna solución, me dieseis alguna pista... me gusta resolver las cosas por mi cuenta
En fin, allá voy. Intentaré ser lo mas concreto posible.
Lo que me traigo entre manos es lo siguiente. Es una web en la que los usuarios que quieren se dan de alta dando una serie de datos, entre ellos una supuesta nota (nota de examen, no de otra cosa!). Luego, a esa nota se le aplica unos cálculos y se obtiene un nuevo valor (llamémosle...
x). Además, también seleccionan de una lista una serie de clases por orden de preferencia a la que quieren matricularse. Imaginemos que hay tres clases, y por tanto pueden elegir un maximo de tres opciones. Lo que quiero hacer es que los que más alto tengan el
x, entren primero en la clase que han elegido como primera opción. Cuando se hayan acabado las plazas o se haya mirado ya todas las primeras opciones de todos los usuarios, se pase a la segunda opción y se llenen las plazas que falta, y así con la tercera.
Creo que mi objetivo está más o menos claro. Estructuralmente, tengo una base de datos con una única tabla, alumnos, que contiene las filas
nombre, nota, x, opción1, opción2, opción3, opciondefinitiva.
Después de mucho pensar, he llegado a esto:
Código PHP:
$cons_ordenar_alumnos_opcion1 = mysqli_query("SELECT * FROM alumnos ORDER BY opcion1");
$i=0;
while($filtrado1 = mysqli_fetch_array($cons_ordenar_alumnos_opcion1)) {
$i++;
$algo = mysqli_query("UPDATE alumnos SET opciondefinitiva = '".$filtrado1['opcion1']."' WHERE nombre= '".$filtrado1['nombre']."'") or die (mysqli_error());
}
Pero claro. Esto hace lo que yo quiero, aunque sin tener en cuenta que solo pueden haber 3 tuplas con la misma
opciondefinitiva. Y ahí me he quedado. Básicamente necesito alguna pista que me oriente. Tal vez sería bueno empezar por decirme si la respuesta está en añadir algo al código sql o al php. Había pensado en agrupar todas las tuplas en función de
opcion1, ordenadas por
x, algo así como
Código SQL:
Ver originalSELECT * FROM alumnos GROUP BY opcion1 ORDER BY x ASC
.. y de alguna forma, pedir solo los 3 primeros resultados de cada grupo, algo así como:
pero sin usar funciones agregadas creo que no puedo poner.
En fin, espero vuestras pistas. Si la solución es tan sencilla que es imposible dar pistas, pues nada... Pero si es posible orientarme hacia la respuesta, mejor. Gracias!