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 :

Select une liste ne comprenant pas les valeurs de l'autre liste [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Select une liste ne comprenant pas les valeurs de l'autre liste
    Bonjour à tous,

    J'ai passé quatre heures pour une requete que je n'arrive pas à résoudre.

    J'ai deux tables, contenant chacune un champs identique (des thèmes)
    Dans la première table j'ai tous les thèmes qui existe sur mon site
    Dans la seconde table j'ai des poèmes dont certains auteurs ont écrit sur certains thème.

    Ce que je voudrais faire, c'est sélectionner les thèmes que les auteurs n'ont pas encore traité.

    En gros

    SELECT theme FROM themedumois WHERE `auteur`="'.$pseudo_membre.'"
    cela correspond aux thèmes qu'on traité l'auteur

    La selection de tous les thèmes existants s'écrit:
    SELECT theme FROM themes WHERE validtheme=1 ORDER BY date DESC


    J'ai essayé trente mille imbrications avec :
    NOT LIKE, avec !=, ou encore avec NOT EXISTS

    Mais je ne trouve pas comment le faire ?

    Voici mon dernier test ridicule, car je fatigue:
    'SELECT theme FROM themes WHERE theme != (SELECT theme FROM themedumois WHERE `auteur`="'.$pseudo_membre.'") AND validtheme=1 ORDER BY date DESC'


    Je vous remercie d'avance pour l'attention que vous porterez à ce message.

    ERRIC

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Donne nous les structure de tes deux tables, avec les clés primaires et les foreigns key(si elles existent).

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Comme demandé:





  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    dans la 2e table tu dois rajouter une clé étrangère "idtheme" pour faire le lien avec la 1re table

    ensuite avec une jointure externe tu as tous les thèmes non traités :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT themes.* 
    FROM themes AS T
    LEFT JOIN themedumois AS TDM
        ON TDM.idtheme = T.idtheme
    WHERE ISNULL(T.idtheme);

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Tout d'abord merci de l'intérêt que vous portez à ma question.

    Malheureusement, je n'ai absolument rien compris à votre explication.

    Mon code était:
    'SELECT theme FROM themes
    WHERE theme != (SELECT theme FROM themedumois WHERE `auteur`="'.$pseudo_membre.'")
    AND validtheme=1 ORDER BY date DESC'
    Vous me proposez:
    SELECT themes.*
    FROM themes AS T
    LEFT JOIN themedumois AS TDM
    ON TDM.idtheme = T.idtheme
    WHERE ISNULL(T.idtheme);
    Cela devrait il donner ?
    'SELECT theme.* FROM themes AS theme LEFT JOIN themedumois AS themedumois ON themedumois.idtheme = theme.idtheme WHERE ISNULL(theme.idtheme);'
    Pfffffffffff, je n'y comprends vraiment rien te serait-il possible de me détailler la démarche pour que je puisse l'adopter, car là je crois que j'ai tout mélanger.

    Par exemple pour mon premier code, en explication ça donnerait:
    'SELECT theme FROM themes
    (Sélectionner le champs theme dans la table themes)
    WHERE theme !=
    (Où le champs theme est différent de)
    (SELECT theme FROM themedumois WHERE
    `auteur`="'.$pseudo_membre.'")
    (theme selectionné dans la table themedumois où l'auteur est le membre connecté)
    AND validtheme=1 ORDER BY date DESC'
    (Et ou le thême est validé, le trier par date descendante)



    Merci d'avance pour ces précisions, car je ne comprends pas ce que sont les T, ni les TDM, etc...

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    On va faire simple.

    dans la table 'themes', tu as tout tes thèmes(1 seul fois normalement), dans la table themedumois plusieurs thèmes peuvent avoir plusieurs auteurs, et tu veux savoir qu'elles thèmes non pas d'auteurs, en supposant que dans la table 'themedumois', un thème ne peut pas être sans auteur ceci devrais te donner le réponse

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT th.theme 
      FROM themes AS th
    WHERE th.theme NOT IN (SELECT theme FROM themedumois)

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonjour à tous

    MERCI POUR TOUTES VOS REPONSES, mais je vois à la dernière que j'ai manqué de clarté.

    En effet
    J'ai donc une table THEMES, qui comporte tous les thèmes d'écriture proposés aux auteurs.
    J'ai une seconde table THEMEDUMOIS comprenant tous les poèmes postés par les auteurs sur ce thème.

    Ce que je souhaite faire concerne la zone membre:
    Je souhaite afficher uniquement les thèmes auxquels l'auteur n'a pas participé.

    Ce que je pensais faire comme formule était:
    Selectionner tous les thèmes différents (not like ou autre chose) de la selection des thèmes présent dans themedumois où l'auteur à participé.

    Merci pour votre aide !

  8. #8
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    cela donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT th.theme 
    FROM themes AS th
    WHERE th.theme NOT IN 
    (SELECT theme FROM themedumois where auteur`="'.$pseudo_membre.'")
    dans la sous requête, tu as tous les thèmes auxquels l'auteur a participé
    et donc tu sélectionne grâce au not in les thèmes qui ne sont pas dans cette liste

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Je ne comprends pas à quoi correspond dans cette requête le th ?

  10. #10
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    C'est un alias du nom de la table, on le définis ici

    cela permet de ne pas mélanger les choses et de raccourcir les écritures.

    donc au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SELECT themes.theme....
    on fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SELECT th.theme

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Oki j'ai compris le code,

    j'avoue avec un peu de mal, mais je me sens beaucoup mieux maintenant, et en plus ça marche....

    Merci pour votre aide c'est super sympa

    ERIC

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/09/2014, 13h56
  2. Créer une fonction : Renvoi pas les valeurs
    Par diego45 dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/07/2014, 19h04
  3. Liste deroulante qui modifie les valeurs de plusieur autres listes
    Par luan220 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/08/2008, 19h06
  4. [Zend_Db_Profiler] ne retourne pas les valeurs
    Par misterniark dans le forum Zend_Db
    Réponses: 2
    Dernier message: 20/04/2007, 22h54
  5. Réponses: 1
    Dernier message: 24/10/2006, 15h59

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