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 :

Filtrer un resultat avec ou sans SELECT ?


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut Filtrer un resultat avec ou sans SELECT ?
    Salut à tous, (et bonne année en passant )


    Je suis en train de bloquer sur une condition PHP. Voici mon soucis :

    Voici, dans l'odre le schema de mon code :

    Par une succession de requete, de while et de if j'obtiens les resultats suivants :

    $id1 = 125 ;
    $id2 = 4556 ;
    $id3 = 94 ;

    Mon probleme est d'extraire lavariable $id où la valeur est la plus elevée. (donc ici l'id n°2)

    Si je passais directement par des valeurs dans une base de données, je pourrais simplement faire un SELECT avec ORDER BY et LIMIT, mais là les valeurs viennent d'un long calcul en amont et je sais pas si un peu faire un SELECT sans BDD...

    Merci d'avance pour vos lumieres

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    utiliser des variables numérotées est une erreur : les tableaux sont la pour ça.
    Après, tu as la fonction PHP max() qui est la pour toi.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut
    Salut ! Merci pour ta réponse !

    En fait mon probleme est plus complexe que ça

    Je fais un SELECT id, famille FROM table

    Ensuite je fais un while pour chaque "id". Ce while me permet ensuite de sortir, après une succession importante de calculs, une liste de nombre. La quantité de nombres peut varier entre zero et plusieurs dizaines.

    Par exemple, le traitement de 3 lignes de la base de données me donnerait :

    Pour l'ID1
    12324
    12344
    5456
    515
    123314


    Pour l'ID2
    12318
    4568785


    Pour l'ID3
    4156456
    45644
    55
    456

    Je but du jeu (et du sujet de ce poste) c'est de garder uniquement le nombre le plus grand pour chaque ID.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    et bien, la réponse est toujours : un tableau et max()

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut
    niarf ! Désolé alors

    Peux-tu m'indiquer la marche à suivre ?

    Pourla fonction phph max() je vois a peu pres comment l'utiliser mais je ne vois pas du tout comment mettre les nombres de chaque ID dans un tableau

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans quoi recoltes-tu actuellement tes nombres ?

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut
    Et bien je recupere ces nombre dans une variable pour l'instant

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    peux-tu être plus précis ?

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut
    Requete
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    $selectmag = "SELECT * FROM magasin;";
    $reqmag = mysql_query($selectmag ,$db);
     
    //Pour chaque magasin on verifit les informations des clients selon une zone
    while ($magasin = mysql_fetch_array($reqmag)) 
    {
     
    	//Requete pour verification des clients dans la zone n°51 du premier magasin
    	$verifzone = "	SELECT	id, nom, km FROM client WHERE zone = "51";" ;
    	$req = mysql_query($verifzone); 
     
    	// On compte le nombre de client autour de la zone
    	$nombreclient = mysql_num_rows($req);
     
     
    				// On extrait une valeur pour chaque client de la zone 51 du premier magasin (il peu y avoir 0 comme 300 clients)
    				while($data2 = mysql_fetch_array($req))
    				{
     
    				//On calcul ici la distance entre un point A et un point B selon un grand nombre de conditionnelles (plus de 150 lignes). A la fin, cette valeur chiffrée est stocké dans une variable $distance.
     
    				}
     
     
    // Et enfin, ICI, on determine quel client de la zone n°51 du premier magasin à la valeur $distance la plus elevé
    }
    J'espere que c'est un minimum clair

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il manque justement la partie dont on parle
    Tu indiques que tu stockes les chiffres dans $distance ; c'est un tableau ?

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut
    Salut

    Et bien heu... comment expliquer... J'ai l'impression de faire simple pourtant

    Ma variable $distance est trouvée par une suite de calcul du genre :

    $distances = "$blabla"+"$niania"*2 ;

    C'est pas un tableau, while me permet de traiter ces valeurs une à une, ce qui fait que si j'ai 6 clients dans mon exemple, j'vais avoir 6 foisla valeur de while affichée

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    et donc chaque boucle efface la valeur précédemment calculée ?

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut
    Non même pas. A chaque fois j'echo une phrase explicite pour savoir jusqu'où le programe arrive et je garde la valeur et c'est normal puisque c'est une boucle while, non ça devrait pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while ($magasin = mysql_fetch_array($reqmag)) 
    {
    distance = "xxxxx" ;
     
    echo "le client ".$magasin[client]." est à une distance de ".$distance."km<br>." ;
    }
    Ca va m'afficher, si il y a 3 clients,

    "le client hovny est à une distance de 51km."
    "le client al hyen est à une distance de 66km."
    "le client londo molary est à une distance de 1km."

    Si ces phrases là s'affichent, c'est que la valeur n'est pas effacée.

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si, après avoir été affichée, elle est ecrasée par le suivante.

    Bref ca donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $tblDistance = array();
    while ($magasin = mysql_fetch_array($reqmag)) 
    {
    $distance = 123456;
    $tblDistance[$magasin['client']] = $distance;
    echo "le client ".$magasin['client']." est à une distance de ".$distance."km</br>." ;
    }
    echo "le magasin le plus loin est à " . max($tblDistance) . "km<br/>";
    et mets des guillemets à tes index de tableau.

  15. #15
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut
    Salut sabotage et merci beaucoup pour ta réponse !

    Je viens d'essayer cette solution et a premiere vue les valeurs que me sort php max() ont l'air d'être bonnes !

    Pour résoudre parfaitement mon probleme il me manque plus qu'à savoir afficher l'id du client le plus loin en rajoutant sur la derniere phrase :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "le magasin le plus loin est à ". max($tblDistance). "km et se nomme ".*********.".<br/>";
    J'ai essayé avec $tblDistance[client] par exemple mais ça ne fonctionne pas. L'espace reste tout simple vide.

  16. #16
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    En recherchant la clé de la plus grande valeur on doit arriver à quelque chose...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $maxDistance = max($tblDistance);
    $clientMaxDistance = array_search($maxDistance, $tblDistance);
    echo "le magasin le plus loin est à ". $maxDistance  . "km et se nomme ".$clientMaxDistance.".<br/>";

  17. #17
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 156
    Points : 74
    Points
    74
    Par défaut
    Salut a tous,

    Après plusieurs essais... ça ne fonctionne pas. La maximum distance extraite est fausse... Il m'affiche tout simplement la valeur de la derniere boucle while. Et impossible d'y faire correspondre un ID client

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/01/2014, 22h19
  2. Réponses: 24
    Dernier message: 22/06/2013, 20h27
  3. Select : avec ou sans merge ?
    Par logiclogic dans le forum SAS Base
    Réponses: 10
    Dernier message: 12/04/2013, 18h22
  4. [Drupal] Afficher puis filtrer les resultats de recherche avec search api solr
    Par tigunn dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 11/03/2013, 16h11
  5. [CR 8.5] filtrer avec l'expert selection un champs calculé!!
    Par abdel6908 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 14/06/2005, 10h30

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