Requête MySQL pour max () de toutes les colonnes
Question
Quelle est la bonne façon de récupérer les valeurs maximales de toutes les colonnes d'une table avec une seule requête? Merci.
Clarification: la même requête devrait fonctionner sur n’importe quelle table, c’est-à-dire que les noms de colonne ne doivent pas être codés en dur.
La solution
Vous devrez le faire en deux étapes: une pour récupérer la structure de la table, puis une seconde pour récupérer les valeurs maximales pour chaque
.En php:
$table = "aTableName";
$columnsResult = mysql_query("SHOW COLUMNS FROM $table");
$maxValsSelect = "";
while ($aColumn = mysql_fetch_assoc($columnsResult)) {
if (strlen($maxValsSelect) > 0) {
//Seperator
$maxValsSelect .= ", ";
}
$maxValsSelect .= "MAX(" . $aColumn['Field'] . ") AS '" . $aColumn['Field'] . "'";
}
//Complete the query
$maxValsQuery = "SELECT $maxValsSelect FROM $table";
$maxValsResult = mysql_query($maxValsQuery);
//process the results....
Autres conseils
SELECT max(col1) as max_col1, max(col2) as max_col2 FROM `table`;
Je pense (mais je serais heureux de me tromper) que vous devez connaître au moins le nombre de colonnes du tableau, mais vous pouvez alors le faire:
select max(c1),max(c2),max(c3),max(c4),max(c5)
from (
select 1 c1, 1 c2, 1 c3, 1 c4, 1 c5 from dual where 0
union all
select * from arbitrary5columntable
) foo;
Évidemment, vous perdez tous les avantages de l'indexation.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow