Valeur maximale d'une colonnne
pc249
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
je souhaite recuperer la valeur maxi dans une des 14 colonnes d'une table sql.
j'ai deja un tableau qui affiche les differentes pluviometries (années et mois).
peut-on extraire directement le resultat de la base sql sans passer par des fetch_array ?
merci si quelqu'un à une idée
je souhaite recuperer la valeur maxi dans une des 14 colonnes d'une table sql.
j'ai deja un tableau qui affiche les differentes pluviometries (années et mois).
peut-on extraire directement le resultat de la base sql sans passer par des fetch_array ?
merci si quelqu'un à une idée
Configuration: Windows / Firefox 71.0
A voir également:
- Valeur maximale d'une colonnne
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Valeur ascii - Guide
- Valeur relative et absolue ✓ - Forum Webmastering
- Excel ne pas afficher #valeur ✓ - Forum Excel
- Formule excel si contient texte alors valeur ✓ - Forum Excel
7 réponses
Bonjour,
En php.. oui.. tu dois obligatoirement faire un FETCH sur le résultat de ta requête si tu veux pouvoir exploiter les données.
Par contre, récupérer le MAX en sql.. il faut se pencher sur la requête SQL...
Mais sans connaitre la structure de ta BDD impossible de te répondre.
par contre... quand tu parles de 14 colonnes... ça me fait peur.... peur que ta base soit mal conçue.(très mal conçue même...) ....
bref, montre nous le contenu de ta bdd ( sa structure ET quelques données d'exemple )
L'ideal serait de nous fournir un dump. (si tu as phpmyadmin tu utilises le menu "export" et tu génères un fichier sql. Tu peux ensuite ouvrir ce fichier avec un éditeur de texte et nous coller son contenu ici;
NB: Pour poster du code sur le forum, tu devras utiliser les balises de code;
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
En php.. oui.. tu dois obligatoirement faire un FETCH sur le résultat de ta requête si tu veux pouvoir exploiter les données.
Par contre, récupérer le MAX en sql.. il faut se pencher sur la requête SQL...
Mais sans connaitre la structure de ta BDD impossible de te répondre.
par contre... quand tu parles de 14 colonnes... ça me fait peur.... peur que ta base soit mal conçue.(très mal conçue même...) ....
bref, montre nous le contenu de ta bdd ( sa structure ET quelques données d'exemple )
L'ideal serait de nous fournir un dump. (si tu as phpmyadmin tu utilises le menu "export" et tu génères un fichier sql. Tu peux ensuite ouvrir ce fichier avec un éditeur de texte et nous coller son contenu ici;
NB: Pour poster du code sur le forum, tu devras utiliser les balises de code;
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Bon.... il y a plusieurs soucis avec ta réponse....
1 - Merci d'utiliser CORRECTEMENT les balises de code ( en y indiquant le langage afin d'avoir la coloration syntaxique et l'indentation )
Je te redonne le lien du tuto : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
2 - Tu utilises l'ancienne extension mysql .... qui est OBSOLETE.
Il faut désormais utiliser PDO ou MYSQLI
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
3 - ( le plus important !!! ) je t'ai demandé le code de ta BDD ( structure + données ) ... pas ton code php !
4 - Comme je le craignais... tu as mal conçu ta bdd ....
Avoir une colonne par mois est une grosse erreur ( erreur de débutant qui penses qu'une BDD fonctionne comme un fichier excel... )
Ta table devrait être de la forme : annee | mois | valeur
et avoir une ligne par couple année/mois
De cette façon il serait possible d'utiliser la fonction MAX de SQL, également les fonctions SUM , GROUP BY... bref... tout ce qui permettrait d'obtenir les données voulues facilement....
1 - Merci d'utiliser CORRECTEMENT les balises de code ( en y indiquant le langage afin d'avoir la coloration syntaxique et l'indentation )
Je te redonne le lien du tuto : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
2 - Tu utilises l'ancienne extension mysql .... qui est OBSOLETE.
Il faut désormais utiliser PDO ou MYSQLI
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
3 - ( le plus important !!! ) je t'ai demandé le code de ta BDD ( structure + données ) ... pas ton code php !
4 - Comme je le craignais... tu as mal conçu ta bdd ....
Avoir une colonne par mois est une grosse erreur ( erreur de débutant qui penses qu'une BDD fonctionne comme un fichier excel... )
Ta table devrait être de la forme : annee | mois | valeur
et avoir une ligne par couple année/mois
De cette façon il serait possible d'utiliser la fonction MAX de SQL, également les fonctions SUM , GROUP BY... bref... tout ce qui permettrait d'obtenir les données voulues facilement....
merci pour la réponse
le programme date de plusieurs années je ne l'ai pas conçu de A à Z je l'ai adapté à mes besoins donc le refaire entièrement n'est pas mon objectif j'utilise le serveur sql de free voici un dump de la BDD
S'il n'est pas possible d'avoir le maxi sur l'ensemble des années, pas de soucis c'était juste un petit plus à afficher!
phpMyAdmin SQL Dump
-- version 3.1.5
-- http://www.phpmyadmin.net
le programme date de plusieurs années je ne l'ai pas conçu de A à Z je l'ai adapté à mes besoins donc le refaire entièrement n'est pas mon objectif j'utilise le serveur sql de free voici un dump de la BDD
S'il n'est pas possible d'avoir le maxi sur l'ensemble des années, pas de soucis c'était juste un petit plus à afficher!
phpMyAdmin SQL Dump
-- version 3.1.5
-- http://www.phpmyadmin.net
-- phpMyAdmin SQL Dump -- version 3.1.5 -- http://www.phpmyadmin.net -- -- Serveur: sql.free.fr -- Généré le : Dim 01 Décembre 2019 à 10:19 -- Version du serveur: 5.0.83 -- Version de PHP: 5.3.9 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- Base de données: `ma_BDD` -- -- -------------------------------------------------------- -- -- Structure de la table `la_pluviometrie` -- CREATE TABLE IF NOT EXISTS `la_pluviometrie` ( `index` varchar(20) collate latin1_general_ci NOT NULL, `annee` year(4) NOT NULL, `janv` decimal(4,1) NOT NULL, `fev` decimal(4,1) NOT NULL, `mars` decimal(4,1) NOT NULL, `avril` decimal(4,1) NOT NULL, `mai` decimal(4,1) NOT NULL, `juin` decimal(4,1) NOT NULL, `juil` decimal(4,1) NOT NULL, `aout` decimal(4,1) NOT NULL, `sept` decimal(4,1) NOT NULL, `oct` decimal(4,1) NOT NULL, `nov` decimal(4,1) NOT NULL, `dec` decimal(4,1) NOT NULL, `total` decimal(10,1) NOT NULL, KEY `index` (`index`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; -- -- Contenu de la table `la_pluviometrie` -- INSERT INTO `la_pluviometrie` (`index`, `annee`, `janv`, `fev`, `mars`, `avril`, `mai`, `juin`, `juil`, `aout`, `sept`, `oct`, `nov`, `dec`, `total`) VALUES ('', 1988, 132.0, 105.0, 83.0, 70.0, 76.0, 11.0, 65.0, 9.0, 29.0, 47.0, 37.0, 43.0, 707.0), //tronqué// ('', 2019, 38.4, 33.3, 52.5, 35.7, 40.5, 64.8, 17.4, 72.9, 40.4, 124.5, 140.7, 0.0, 520.9);
En mysql il existe la fonctio GREATEST pour trouver la valeur la plus grande sur un ensemble de colonnes
https://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html#function_greatest
Un truc du genre
https://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html#function_greatest
Un truc du genre
SELECT `index`, annee, GREATEST( IFNULL(janv,0), IFNULL(fev,0), IFNULL(mars,0), IFNULL(avril,0), IFNULL(mai,0), IFNULL(juin,0), IFNULL(juil,0), IFNULL(aout,0) IFNULL(sept,0) IFNULL(oct,0) IFNULL(nov,0) IFNULL(dev,0) ) plusgrand FROM la_pluviometrie
j'ai ajouté les lignes mais ça n'affiche pas la valeur max???
voici la modif
$query = "SELECT * FROM la_pluviometrie ORDER by annee ";//org
//modif du 9 dec 2019
$querymax = "SELECT `index`,
annee,
GREATEST(
IFNULL(janv,0),
IFNULL(fev,0),
IFNULL(mars,0),
IFNULL(avril,0),
IFNULL(mai,0),
IFNULL(juin,0),
IFNULL(juil,0),
IFNULL(aout,0)
IFNULL(sept,0)
IFNULL(oct,0)
IFNULL(nov,0)
IFNULL(dev,0)
) plusgrand
FROM la_pluviometrie ";
//fin de modif
voici la modif
$query = "SELECT * FROM la_pluviometrie ORDER by annee ";//org
//modif du 9 dec 2019
$querymax = "SELECT `index`,
annee,
GREATEST(
IFNULL(janv,0),
IFNULL(fev,0),
IFNULL(mars,0),
IFNULL(avril,0),
IFNULL(mai,0),
IFNULL(juin,0),
IFNULL(juil,0),
IFNULL(aout,0)
IFNULL(sept,0)
IFNULL(oct,0)
IFNULL(nov,0)
IFNULL(dev,0)
) plusgrand
FROM la_pluviometrie ";
//fin de modif
Alors... tu as créé une variable $querymax ..... l'exécutes tu au moins ?
Au passage Je te redonne le lien du tuto concernant les balises de code que tu as du mal à utiliser visiblement : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Je t'invite également à lire ET à appliquer le contenu de ce lien :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Et pour finir.... afin de voir si une requête fonctionne et avoir un aperçu de ce qu'elle retourne il faut d'abord la tester DIRECTEMENT dans la BDD ( via phpmyadmin par exemple )
Et seulement après on peut l'utiliser dans un code PHP ...
Au passage Je te redonne le lien du tuto concernant les balises de code que tu as du mal à utiliser visiblement : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Je t'invite également à lire ET à appliquer le contenu de ce lien :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Et pour finir.... afin de voir si une requête fonctionne et avoir un aperçu de ce qu'elle retourne il faut d'abord la tester DIRECTEMENT dans la BDD ( via phpmyadmin par exemple )
Et seulement après on peut l'utiliser dans un code PHP ...
les balise visiblement ne fonctionnent pas poutant je met entre les cotes ???
voici le résultat quand je lance directement dans mysql
voici le résultat quand je lance directement dans mysql
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IFNULL(sept,0), IFNULL(oct,0), IFNULL(nov,0), IFNULL(dev,0), ) plusg' at line 10
SELECT `index` , annee, GREATEST( IFNULL( janv, 0 ) , IFNULL( fev, 0 ) , IFNULL( mars, 0 ) , IFNULL( avril, 0 ) , IFNULL( mai, 0 ) , IFNULL( juin, 0 ) , IFNULL( juil, 0 ) , IFNULL( aout, 0 ) IFNULL( sept, 0 ) , IFNULL( oct, 0 ) , IFNULL( nov, 0 ) , IFNULL( dev, 0 ) , ) plusgrand
FROM `la_pluviometrie`
LIMIT 0 , 30
les balise visiblement ne fonctionnent pas poutant je met entre les cotes
Tu as bien lu le tuto ?? .... il faut spécifier le LANGAGE dans les balises de code.
Voici la requête corrigée
SELECT `index`, annee, GREATEST( IFNULL(janv,0), IFNULL(fev,0), IFNULL(mars,0), IFNULL(avril,0), IFNULL(mai,0), IFNULL(juin,0), IFNULL(juil,0), IFNULL(aout,0), IFNULL(sept,0), IFNULL(oct,0), IFNULL(nov,0), IFNULL(`dec`,0) ) plusgrand FROM la_pluviometrie
merci la requête fonctionne bien en direct sur le serveur mais le but c'est d'afficher une seule année ou la valeur est la plus haute (cumul de tous les mois) pour l'instant de 1988 à 2019 c'est l'annéee 1994 avec 863 mm qui arrive en tête donc je voudrais afficher "l'année de tous les records de pluviométrie est 1994 avec 863 mm"
j'ai remplacé index par annee et annee par total
j'ai remplacé index par annee et annee par total
merci pour la réponse pour les balises tjrs le me^me pb????
le code ci-dessous fonctionne sur le server mais pour la partie php non...
au niveau des query je ne sais pas trop! j'ai mis un query à la suite de celui d'origine c'est pas top je pense
le code ci-dessous fonctionne sur le server mais pour la partie php non...
au niveau des query je ne sais pas trop! j'ai mis un query à la suite de celui d'origine c'est pas top je pense
<?php SELECT annee, total FROM `la_pluviometrie` ORDER BY `index` DESC LIMIT 1 $query = "SELECT * FROM la_pluviometrie ORDER by annee "; //affiche tout le tableau indispensable $querymax ="SELECT annee, total FROM `la_pluviometrie` ORDER BY `index` DESC LIMIT 1"; $resultmax = @mysql_query($querymax) or die('Erreur SQL !<br />'.$resultmax.'<br />'.mysql_error()); //arret sur erreur $numbermax = @mysql($resultmax); echo "$numbermax" ; ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
là j'ai besoin du spécialiste pour sortir la valeur! car ça affiche Array mais il y a sans doute une bonne raison... une bonne nouvelle les balises fonctionnent!
<?php //modif du 9 dec 2019 $query2 = "SELECT annee, total FROM la_pluviometrie ORDER by total DESC LIMIT 1 "; $result2 = @mysql_query($query2) or die('Erreur SQL !<br />'.$result2.'<br />'.mysql_error()); //arret sur erreur while($row1 = @mysql_fetch_row($result2)){ $max_des_annee = max(array($row1)); } echo $max_des_annee ; //fin de modif*/ ?>
Je n'avais pas vu qu'elle fetch tu avais utilisé
Donc
Donc
echo $row[0]; echo $row[1];
Et si tu veux utiliser la syntaxe que je t'ai donné dans ce cas utilise celui-là
https://www.php.net/manual/fr/function.mysql-fetch-array.php
https://www.php.net/manual/fr/function.mysql-fetch-array.php
Bonne continuation
PS: https://www.commentcamarche.net/infos/25917-marquer-un-fil-de-discussion-comme-etant-resolu/
PS: https://www.commentcamarche.net/infos/25917-marquer-un-fil-de-discussion-comme-etant-resolu/
voilà le code qui fonctionne mais sans faire ressortir la valeur maxi des annéees.
Le maxi pour les mois fonctionne bien