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

PHP & Base de données Discussion :

Utilisation de SELECT DISTINCT [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2008
    Messages : 78
    Par défaut Utilisation de SELECT DISTINCT
    bonjour,

    j'ai besoin d'une petite aide pour une requête sql, qui accessoirement est lié à une liste déroulante en php

    mon problème est le suivant. je souhaiterais avoir tous les âges existants qui s'affichent mais que seul un resultat soit affiché.

    car le problème de la requête que j'ai faite, c'est qu'elle me selectionne bien l'âge, mais elle n'affiche pas les autres, et moi je souhaiterais qu'elle affiche également les autres..

    voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT age FROM `fichpdt`, `catalogue`
    	WHERE `fichpdt`.`ref` = `catalogue`.`prod_ref` AND `prod_id` = '".$_GET['id']."'
    cette requête m'affiche juste l'âge qui doit être preselectionné. mais elle ne m'affiche pas les autres âges possible. ce que je souhaiterais avoir.

    je ne sais pas si cela est possible..

    merci de votre aide

  2. #2
    Membre Expert
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Par défaut
    Bonjour,

    Et que contient ta base, quels données sont présentes ? Ou au moins quels sont les schémas de tes tables ?

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2008
    Messages : 78
    Par défaut
    ah oui, oups pardon j'ai oublié d'indiquer ça

    alors j'ai une table fichpdt qui a ref, nom, age, img, txt, fin, cdc, cdc2 et buy
    j'ai une table catalogue qui a prod_id, prod_ref, prod_nom, prod_famille, prod_gamme, prod_url, prod_date

    il y a d'autres tables mais elles ne sont pas importante pour cette requête

    des données sont déjà présentes sur les tables. il s'agit d'un catalogue de jouet

    et donc pour expliciter. j'ai une entrée dans le catalogue, je souhaiterais créer une nouvelle entrée sans avoir à tout rentrer, je fais donc une copie de l'entrée déjà existante. j'arrive sur un formulaire où je récupère des données et j'en rentre, je valide et ça me redirige vers un nouveau formulaire où là je souhaiterais que :
    - les cases déjà cochées sur la première entrée, le soit ici aussi (ça c'est déjà fait)
    - les âges soit affichés sous listes déroulantes et que l'âge de la première entrée soit pré-selectionné

    pour la pre-selection je sais faire sous php, mais c'est ma requête sql qui merdouille, car elle n'affiche pas tous les âges mais juste celui de la première entrée..

    je sais pas si j'ai été super claire, dites-le moi sinon

  4. #4
    Membre Expert
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Par défaut
    Combien de lignes de résultats obtient ta requêtes ?

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2008
    Messages : 78
    Par défaut
    ma requête obtient une ligne, l'âge de la première entrée
    mais je voudrais qu'elle affiche également les autres

  6. #6
    Membre Expert
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Par défaut
    Si ta requête n'obtient qu'une ligne, c'est qu'elle est trop restrictive ...
    Si tu veux avoir tous les âges de ton catalogue, il te suffit de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT age FROM fichpdt

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2008
    Messages : 78
    Par défaut
    oui ça c'est ce que je fais lorsque je souhaite modifier. mais pour copier ça ne peut pas car il copie suivant une autre table..


    bon peut-être que mon problème ne vient pas de ma requête sql mais de mon code php..

    arg, je sais plus

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    C'est effectivement un problème de programmation PHP.

    - les âges soit affichés sous listes déroulantes et que l'âge de la première entrée soit pré-selectionné
    Pour avoir tous les âges, prendre la requête de Anthony.Desvernois.

    L'âge de la première entrée doit par contre être précédemment mémorisé dans une variable PHP afin que l'affichage généré par PHP en tienne compte.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2008
    Messages : 78
    Par défaut
    j'ai une petite question.

    bon déjà voici mon code :

    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
    $requete2 = "SELECT DISTINCT age FROM `fichpdt`, `catalogue` WHERE `fichpdt`.`ref` = `catalogue`.`prod_ref` and `prod_id`= '".$_GET['id']."' ";
    	$result2 = $bdd->query($requete2);
    	$requete = "SELECT DISTINCT age FROM `fichpdt`";
        $result = $bdd->result_to_array($bdd->query($requete));
     
        for($i=0;$i<count($result);$i++)
        {
        if($_POST['age'] == $result2)
        {
        print("<option value='".$result2."' selected>".$result[$i][0]."</option>");
        }
        else
        {
        print("<option value='".$result[$i][0]."' >".$result[$i][0]."</option>");
        }
        }

    la question qui me trotine est la suivante:

    je vais chercher l'âge de la ligne du catalogue que je copie : result2
    je cherche tous les âges qui existent afin de les mettre dans la liste déroulante : result

    comment, dans mon for et dans mon if le code peut-il savoir que la valeur de result2 correspond à une des valeurs de result. ?!

    il ne peux pas savoir dans le tableau si c'est le result[0][0] ou le result[1][0] ou le result[2][0] etc...

    et même si je mets result2 dans un tableau, qui n'aura qu'une valeur, comment peut-il savoir sur quelle valeur afficher?

    je suis perdue là, je tourne en rond

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Par défaut
    Comprends pas trop ton soucis! Ta variable $_POST['age'] : à quoi correspond-elle?

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2008
    Messages : 78
    Par défaut
    elle me permet d'insérer dans ma base de donnée la valeur de age

    avec la requête sql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		$requete = "INSERT INTO `fichpdt`(`ref`,`nom`,`age`,`img`,`txt`, `fin`, `cdc`, `cdc2`, `buy`)VALUES('".($_GET['ref'])."','".($_GET['nom'])." ','".($_POST['age'])."','".($_GET['ref'])."','".($_POST['txt'])."','".($_POST['fin'])."','0','0','0')";
    		$bdd->query($requete);

    et mon soucis est que l'âge n'est pas pre-selectionné quand j'arrive sur le formulaire. il affiche le premier âge de la liste


    [et au passage bizarre j'avais fait un post et c'est comme si je l'avais pas fait... ]

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Par défaut
    Je ne dois pas bien comprendre mais
    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
     
    $requete = "SELECT DISTINCT age FROM `fichpdt`";
    $result = $bdd->result_to_array($bdd->query($requete));
    $age_present = false;
        for($i=0;$i<count($result);$i++)
        {
            echo "<option value='".$result[$i][0]."' ";
            if($_POST['age'] == $result[$i][0])
            {
                 echo "selected";
                 $age_present = true;
            }
            echo ">".$result[$i][0]."</option>";
        }
    // Si $age_present == false alors $_POST['age'] non présent dans la liste... il faut l'ajouter?

  13. #13
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2008
    Messages : 78
    Par défaut
    je ne peux pas utiliser un type boolean, ma variable age est un varchar

    bool ne marche que sur les variables type int non?

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Par défaut
    mon booléen n'est là que pour savoir si l'age passé en paramètre (donc à présélectionner) est déjà repertorié dans ta table 'fichpdt'.
    Re-lis bien le bout de code que je t'ai mis!

  15. #15
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2008
    Messages : 78
    Par défaut
    je disais ça car à la base il me semblait que bool pouvait être utilisé pour tout.

    mais lorsque j'ai testé ça m'a mis une erreur (et ça me met toujours ^^ ) . mais l'erreur n'a rien a voir avec le bool, c'est une erreur unexpected T_VARIABLE du à une erreur de syntaxe si je n'abuse.

    probablement parce que la variable age_present n'est pas prédéfinis ou vérifier..

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Par défaut
    Autant pour moi, j'ai corriger mon code pour enlever le type bool! J'alterne plusieurs langages de prog en ce moment : j'ai un peu de mal!

  17. #17
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2008
    Messages : 78
    Par défaut
    ^^ pas de soucis

    mais j'avais déjà testé sous cette forme, mais ça ne règle pas le problème. ce qui me semble logique en soit, car sinon comment peut-il connaître la valeur de la ligne déjà enregistré et en prendre exemple?.

    alors j'ai voulu tenter ceci :

    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
    $requetet2 = "SELECT DISTINCT age FROM `fichpdt`, `catalogue` WHERE `fichpdt`.`ref` = `catalogue`.`prod_ref` and `prod_id`= '".$_GET['id']."' ";
    	$info = $bdd->query($requete2);
    	$requete = "SELECT DISTINCT age FROM `fichpdt`";
        $result = $bdd->result_to_array($bdd->query($requete));
    	$info = false;
    	    for($i=0;$i<count($result);$i++)
    		{
    			echo "<option value'".$result[$i][0]."' ";
    			if($_POST['age'] == $info)
    			{
    				echo "selected";
    				$info = true;
    			}
    	    echo ">".$result[$i][0]."</option>";
        }
        ?>
    ce qui voudrait dire, si $info est vrai, alors on sélectionne cette âge.

    mais non, il doit me manquer un soupçon de logique quelque part..

  18. #18
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2008
    Messages : 78
    Par défaut
    youhouu j'ai enfin résolu mon problème!!!

    plus d'un mois que je suis deçue quand même (fin heureusement, pas un mois jour pour jour...!!! )


    donc donc, pour donner quand même une petite solution, si un jour quelqu'un est dans une situation réciproque que la mienne..

    afin d'afficher l'âge sous liste déroulante, voilà ce que je fais :

    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
     <tr>
        <td height="30" valign="middle"><div align="left" >Age FR:</div></td>
        <td height="30" valign="middle"><label>
    <select name="age" size="1" >
    	<?
        $requete_txt = "SELECT DISTINCT age FROM `fichpdt`";
        $result = $bdd->result_to_array($bdd->query($requete_txt));
        for($i=0;$i<count($result);$i++)
        {
        if($_POST['age'] == $result[$i][0])
        {
        print("<option value='".$result[$i][0]."' selected>".$result[$i][0]."</option>");
        }
        else
        {
        print("<option value='".$result[$i][0]."' >".$result[$i][0]."</option>");
        }
        }
        ?>
    </select>
    ceci me permet donc d'afficher tous les âges existants dans la table.

    ceci dit, ça ne suffit pas pour pré sélectionné l'âge que je copie...

    un peu plus haut, dans mes codes php, je fais donc une requête qui me permettra de définir la valeur de $_POST['age'] par cette formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //récupérer age en FR
    	$requete = "SELECT DISTINCT `age` FROM `fichpdt`, `catalogue`
    	WHERE `fichpdt`.`ref` = `catalogue`.`prod_ref` AND `prod_id` = '".$_GET['id']."'";
    	$info = $bdd->result_to_array($bdd->query($requete));
     
    	$_POST['age']=$info[0][0];

    et voilà, le tour est joué, est mon âge est bien pré sélectionné suivant la valeur copié.. =)

    merci en tout cas à ceux qui ont essayé de m'aider

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de SELECT DISTINCT
    Par Imad_ing dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 19/11/2007, 14h59
  2. Select distinct
    Par mic79 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/04/2005, 16h30
  3. select distinct substring
    Par nmerydem dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/06/2004, 16h58
  4. Select distinct et order by
    Par arsgunner dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/06/2004, 11h17
  5. equivalent SELECT DISTINCT pour MyBase?
    Par chrisou31 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 19h33

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