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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    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 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    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
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

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





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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    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
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    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 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    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)

+ 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