IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récupérer la valeur max sql


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    Novembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2012
    Messages : 164
    Points : 61
    Points
    61
    Par défaut Récupérer la valeur max sql
    bonjour
    je n'arrive pas a récupérer la valeur max, j'ai la valeur min...comprend pas
    je ne sais pas si il y a une autre méthode avec une seul requete et sans condition.

    Nom : Capture d'écran_20240214_185945.png
Affichages : 120
Taille : 267,0 Ko

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    $pays = "france";
    $totalP = 100000;
     
     
    	//si poids > a la valeur max de la table
    		$basmaxp = $bdd->prepare("SELECT port, MAX(poids) AS maxpoids FROM frais_port WHERE pays = :pays GROUP BY port");
    		$basmaxp->execute(array(
    		'pays'=> $pays
    		));
    	if ($basefdp = $basmaxp->fetch()){
    	 echo $FPpoids = $basefdp['maxpoids'];
    	 echo $maxprix = $basefdp['port'];
    	}
    	if(isset($FPpoids) AND $totalP > $FPpoids)
    	{
    	 $FPports = $maxprix ;
    	 $prixfport = number_format($FPports, 2);
    	 $totfport = number_format($FPports, 2). "€";
    	} else {
     
    	//calcul en fonction du poids enregistré dans la base
    		$basfraipo = $bdd->prepare("SELECT port, poids 
    		FROM frais_port 
    		WHERE poids >= :poids AND pays = :pays ORDER BY poids ASC limit 0,1");
    		$basfraipo->execute(array(
    		'poids'=> $totalP,
    		'pays'=> $pays
    		));
    		if ($elementfp = $basfraipo->fetch()){
    		$FPpoids = $elementfp['poids'];
    		$FPports = $elementfp['port'];
    		$prixfport = number_format($FPports, 2);
    		$totfport = number_format($FPports, 2). "€";
    		}
    	}

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 217
    Points
    8 217
    Billets dans le blog
    17
    Par défaut
    Tu veux la valeur max de quoi ?

    Ton PHP est illisible, dur de décrypter l'intention

    PS : les données MySQL sont-elles correctement typées ? Si tes colonnes poids et/où port sont du TEXT/VARCHAR alors les calculs ne seront pas bons
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre du Club
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    Novembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2012
    Messages : 164
    Points : 61
    Points
    61
    Par défaut
    je veux récupérer le poids.
    la colonne poids en int et port en float.
    Si j'enlève GROUP BY port = je récupère bien la valeur max du poids mais pour le port j'ai la valeur plus petite soit 4.95

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Telle que ta requête est écrite, tu récupères le poids max pour chaque valeur du port.
    Si tu nous donnes un échantillon et le résultat attendu, on pourra t'aider.

    Tatayo.

    P.S. si tu gardes ta requête telle quelle, en ne supprimant que le GROUP BY, tu ne récupères pas le port min, mais "une valeur" au bon vouloir de MySQL.

  5. #5
    Membre du Club
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    Novembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2012
    Messages : 164
    Points : 61
    Points
    61
    Par défaut
    bonjour
    je voudrais récupérer le poids le plus gros pour récupérer la valeur du port en fonction du pays.
    Donc sur table 3000 pour avoir le port 33.4

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 217
    Points
    8 217
    Billets dans le blog
    17
    Par défaut
    C'est franchement pas clair

    Je suppose que tu as les paramètres :
    :pays : où le colis doit être livré
    :poids : le poids du colis à livrer

    Ta table contient les colonnes :
    pays : pays de destination
    poids : poids max
    port : coût

    => Tu veux le coût pour tel pays immédiatement sous le poids max possible

    Ce qui donne :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ALL id, pays, poids, port
    FROM frais_port
    WHERE pays = :pays AND :poids <= poids
    ORDER BY poids ASC
    LIMIT 1

    Ex. pour un colis de 14500 g à destination de la France tu auras le résultat { 25, france, 15000, 26.95 }
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Membre éclairé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juin 2014
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2014
    Messages : 417
    Points : 834
    Points
    834
    Par défaut
    Citation Envoyé par maxtrident Voir le message
    bonjour
    je voudrais récupérer le poids le plus gros pour récupérer la valeur du port en fonction du pays.
    Donc sur table 3000 pour avoir le port 33.4
    La première chose à faire pour résoudre un problème est de bien le poser.
    Là, on ne comprend rien à ce que tu veux !

    Je crois comprendre que ce que tu veux, c'est afficher la valeur du port le plus élevé pour le pays.
    Si c'est bien ça, pourquoi passer par le champ poids ? (bien que ce soit faisable) ?

  8. #8
    Membre du Club
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    Novembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2012
    Messages : 164
    Points : 61
    Points
    61
    Par défaut
    seb, oui c'est ma 2eme requête... quand un poids est inférieur au poids max donc 30000... mais si le poids est supérieur à 30000 = ça n'affiche rien
    c'est pour ça que j'ai fait 2 requêtes la première pour savoir le poids max avec son prix (colonne port).
    donc valeur que je veut : port 33.4 et poids 30000 pour le pays la france.
    après je fait une comparaison: si un poids est supérieur au poids max de la table = le port sera de 33.4 pour la france

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 217
    Points
    8 217
    Billets dans le blog
    17
    Par défaut
    mais si le poids est supérieur à 30000 = ça n'affiche rien
    Tu dépasses le poids max livrable.
    Tu voudrais que ça affiche quoi ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  10. #10
    Membre du Club
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    Novembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2012
    Messages : 164
    Points : 61
    Points
    61
    Par défaut
    pour un poids > 30000 (valeur max dans la table) le prix (colonne port) = 33.4

  11. #11
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 217
    Points
    8 217
    Billets dans le blog
    17
    Par défaut
    Ça veut dire que si j'envoie quelque chose de plus de 30 kg je paie 35 € dans tous les cas et quelque soit le poids
    Es-tu sûr de toi ?

    Si le résultat de la requête précédente est vide alors il suffit de faire une 2nde requête pour chercher le coût max sur un pays donné :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ALL MAX(port) AS port
    FROM frais_port
    WHERE pays = :pays

    Ceci dit cela interroge sur la table frais_port et ce que représentent les colonnes poids et port
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  12. #12
    Membre du Club
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    Novembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2012
    Messages : 164
    Points : 61
    Points
    61
    Par défaut
    heu est ce que tu as regardé mon code de départ... il est quand même pas si compliqué que ça ?

    Ça veut dire que si j'envoie quelque chose de plus de 30 kg je paie 35 € dans tous les cas et quelque soit le poids
    oui obligé: il me faut une valeur pour après les calculs et réponse json, sinon tous plante.
    et si inférieur à 30kg = ma 2eme requêtes (pas de problème).

    ton code ne fonction pas, c'est pratiquement le même que le mien.
    j'ai comme résultat $FPpoids = 250 et $maxprix = 4.95 soit le mini et pas le maxi demandé, je pige pas pourquoi

  13. #13
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 217
    Points
    8 217
    Billets dans le blog
    17
    Par défaut
    heu est ce que tu as regardé mon code de départ... il est quand même pas si compliqué que ça ?
    Je ne lis pas les scripts qui ne sont pas correctement présentés/indentés.
    (Après tout c'est en premier lieu au demandeur de faire un minimum d'effort de présentation )

    oui obligé: il me faut une valeur pour après les calculs et réponse json, sinon tous plante.
    Donc tu t'engages à livrer partout dans le monde pour seulement 35 € un colis d'un poids supérieur à 30 kg pour des raisons de plantade JSON ?
    À mon sens il faut revoir ici urgemment la logique.

    ton code ne fonction pas, c'est pratiquement le même que le mien.
    Je n'en ai pas donné. Seulement une requête SQL qui elle fonctionnerait correctement avec un paramètre :pays.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  14. #14
    Membre du Club
    Homme Profil pro
    Pour le plaisir
    Inscrit en
    Novembre 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pour le plaisir
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2012
    Messages : 164
    Points : 61
    Points
    61
    Par défaut
    bon pas moyen... testé ça et idem: je récupère les valeurs mini.
    je laisse tomber -> je vais récupérer que la valeur du poids max et ajouter un gros prix pour le port (Plus logique).
    je pense que c'est le float sur la colonne port qui doit foirer la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $basmaxp = $bdd->prepare("select t1.port, t1.poids
    from frais_port t1
    where t1.poids = (select max(t2.poids) from frais_port t2 where t2.port = t1.port AND pays = :pays)
    ");
     
    $basmaxp = $bdd->prepare("
    SELECT l.*
    FROM frais_port l
    INNER JOIN
    (
    SELECT port, MAX(poids) AS maxpoids
    FROM frais_port
    GROUP BY port
    ) groupel ON l.port = groupel.port AND l.poids = groupel.maxpoids
    ");

Discussions similaires

  1. Requête SQL : récupérer la valeur max
    Par Rodie dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 23/07/2006, 11h28
  2. requete SQL avec valeur max
    Par oeil de nuit dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/01/2006, 08h58
  3. [DAO]rechercher la valeur max d'un identifiant
    Par stressy dans le forum Access
    Réponses: 3
    Dernier message: 13/12/2005, 11h28
  4. Sélection d' une valeur max depuis 2 tables
    Par ipeteivince dans le forum Requêtes
    Réponses: 4
    Dernier message: 13/05/2005, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo