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());
}
Código SQL:
.. y de alguna forma, pedir solo los 3 primeros resultados de cada grupo, algo así como: Ver original
SELECT * FROM alumnos GROUP BY opcion1 ORDER BY x ASC
Código SQL:
pero sin usar funciones agregadas creo que no puedo poner. Ver original
LIMIT 3
Código SQL:
Ver original
GROUP BY
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!