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 :

Recherche de 2 conditions avec 2 autres sur la même table [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 56
    Par défaut Recherche de 2 conditions avec 2 autres sur la même table
    Bonsoir ,

    déjà bonne année !!!

    Mon soucis et le suivant :

    Pour un petit site de collectionneur j'ai une table qui gère la collection de tous les membres.

    Le soucis , je n'arrive pas a faire un filtre comme ceci :
    Rechercher les enregistrements commun ou un membre dispose d'une telecarte en double et qu'un autre ne l'a pas dans sa collection

    au debut j'ai cru penser utiliser ceci (en php) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query="SELECT * FROM collection WHERE (col='n' AND surnom='$demandeur')  AND (dou='y' AND surnom='$offrant')";
    le probleme cela retourne rien , meme en utilisant phpmyadmin pour faire les test en mettant un demandeur X et un offrant Y

    il y a moyen de faire un sorte de requete croise sur une 1 table ???

    merci de votre aide

    Christophe

  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
    Par défaut
    Tu pourrais nous en dire plus sur la structure de ta table ?
    "col" et "dou" ca correspond a quoi ?
    est-ce que tu as une table avec tous les membres ?
    un membre qui n'a pas un objet dans sa collection ca correspond a une absence d'enregistrement ou a un enregistrement avec une mention particuliere ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 56
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu pourrais nous en dire plus sur la structure de ta table ?
    "col" et "dou" ca correspond a quoi ?
    est-ce que tu as une table avec tous les membres ?
    un membre qui n'a pas un objet dans sa collection ca correspond a une absence d'enregistrement ou a un enregistrement avec une mention particuliere ?
    pardon , pour l'oublie , je pensais que mon explication aurai suffit !

    les informations manquantes

    collection -> table contenant les informations des cartes collectionnées
    il existe aussi une table membres qui elle contient les informations des membres (pseudo,mail,mot de passe en MD5, nom, prenom .... )

    champs de table collection
    numero -> reference de la carte
    surmon -> pseudo de l'utilisateur
    dou -> 'y' si carte en double 'n' dans le cas contraire
    col -> 'y' si carte dans sa collection 'n' dans le cas contraire

    quand un membre s'inscrit j'ajoute dans la table collection toutes les cartes avec dou='n' et col='n'

  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
    Par défaut
    Tout d'abord je me permets quelques remarques sur ta base :

    - quand on a deux tables qui sont liés (ta table "collection" contient une reference à la table "membres") on fait cette liaison par l'id.
    Actuellement tu repetes le pseudo complet du membre sur chaque enregistrement de la table "collection" ; et si un membre devait changer de pseudo, tu devrais changer toutes les enregistrements de sa collection egalement.

    - quand tu dois faire des champs oui/non utiliser une champ BOOL avec 0 ou 1 ; c'est plus economique à stocker et comparer.

    - nomme tes champs de maniere explicite : n'hesite pas a ecrire "double" plutot que "dou" par exemple.

    - pour finir, il aurait suffit d'un champ stockant le nombre de cartes possédées. Cela te permettait de savoir avec un seul champ si le membre n'a pas la carte, l'a en double ou meme plus.
    Actuellement tu pourrais techniquement avoir dou 'y' et col 'n' ce qui est incoherent.

    ---------------------------------


    Pour le reste tu peux joindre une table a elle meme, il faut juste bien nommer chaque appel de la table et les champs qui vont avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT numero,c2.surnom FROM collection c1  JOIN collection c2 USING (numero)
    WHERE c1.col='n' AND c1.surnom='$demandeur' and c2.dou='y'
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 56
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tout d'abord je me permets quelques remarques sur ta base :

    - quand on a deux tables qui sont liés (ta table "collection" contient une reference à la table "membres") on fait cette liaison par l'id.
    Actuellement tu repetes le pseudo complet du membre sur chaque enregistrement de la table "collection" ; et si un membre devait changer de pseudo, tu devrais changer toutes les enregistrements de sa collection egalement.

    - quand tu dois faire des champs oui/non utiliser une champ BOOL avec 0 ou 1 ; c'est plus economique à stocker et comparer.

    - nomme tes champs de maniere explicite : n'hesite pas a ecrire "double" plutot que "dou" par exemple.

    - pour finir, il aurait suffit d'un champ stockant le nombre de cartes possédées. Cela te permettait de savoir avec un seul champ si le membre n'a pas la carte, l'a en double ou meme plus.
    Actuellement tu pourrais techniquement avoir dou 'y' et col 'n' ce qui est incoherent.

    ---------------------------------


    Pour le reste tu peux joindre une table a elle meme, il faut juste bien nommer chaque appel de la table et les champs qui vont avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT numero,c2.surnom FROM collection c1  JOIN collection c2 USING (numero)
    WHERE c1.col='n' AND c1.surnom='$demandeur' and c2.dou='y'
    Merci pour les conseils .
    concernant les nom de table , j'ai une très vieille habitude qui date de mes premiers programme en basique ou l'espace était vitale, mais je vais suivre ton conseil
    Je vais transformer mes champs en boolean ( même si ça m'oblige a modifier quelques page)

    et en ce qui concerne le pseudo , j'interdit le changement de pseudo , c'est pour cela que je n'ai pas travailler avec un index

    Le nombre de carte est une très bonne idée , par contre cela va provoquer une grosse modif !! (mais je vais devoir y penser serieusement)

    Encore mille pour ton aide plus que rapide !!

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

Discussions similaires

  1. Requête update avec un select sur la même table
    Par sheira dans le forum Requêtes
    Réponses: 6
    Dernier message: 15/09/2010, 16h09
  2. une requête avec 2 count sur la même table
    Par epeichette dans le forum Requêtes
    Réponses: 11
    Dernier message: 30/06/2009, 09h19
  3. Réponses: 3
    Dernier message: 12/06/2007, 23h31
  4. Update avec un select sur la même table
    Par Xunil dans le forum Administration
    Réponses: 5
    Dernier message: 09/04/2007, 16h40
  5. [SQL]Requete avec 2 count(*) sur la même table
    Par Sonny dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/11/2005, 16h41

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