<< Bases de Datos php mysql

Obtener los 10 elementos más comunes que forman parte de los minerales de la base de datos.

Inicialmente, relacionaremos las tablas involucradas en la consulta:

SELECT ele.simbolo, ele.nombre
FROM elementos ele, elemento_mineral elemi, mineral min
WHERE ele.simbolo = elemi.elemento AND
elemi.mineral = min.ID

Veamos que los elementos aparecen varias veces (por ejemplo, Calcio aparece 7 veces en la lista.

Sabemos que queremos obtener los elementos más comunes, por lo que podríamos pensar que queremos contar el número de apariciones de registros agrupados por el elemento.

SELECT ele.simbolo, ele.nombre, count(*) AS apariciones
FROM elementos ele, elemento_mineral elemi, mineral min
WHERE ele.simbolo = elemi.elemento AND
elemi.mineral = min.ID
GROUP BY ele.simbolo

Ya casi para acabar, lo que deseamos es que MySQL nos ordene los resultados obtenidos de modo que podamos seleccionar los elementos que más veces se presentan en los minerales.

SELECT ele.simbolo, ele.nombre, count(*) AS apariciones
FROM elementos ele, elemento_mineral elemi, mineral min
WHERE ele.simbolo = elemi.elemento AND
             elemi.mineral = min.ID
GROUP BY ele.simbolo
ORDER BY apariciones DESC

Para acabar, lo que queda es decirle a MySQL que no nos muestre todos los registros que ha encontrado, sinó que simplemente nos muestre los 10 primeros que, ya que están ordenados en orden descendente (de mayor a menor), serán los 10 elementos más comunes.

SELECT ele.simbolo, ele.nombre, count(*) AS apariciones
FROM elementos ele, elemento_mineral elemi, mineral min
WHERE ele.simbolo = elemi.elemento AND 
             elemi.mineral = min.ID
GROUP BY ele.simbolo
ORDER BY apariciones desc
LIMIT 10

libros sin dueño
libros sin dueño