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 :

Probleme sous requete


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
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut Probleme sous requete
    Bonjour,

    Quand je lance la requete ci-dessous depuis une page PHP le résultat n'est pas le bon. Quand je le lance directement dand PHPMYADMIN ca fonctionne. Ca fais trois jour que je cherche une soluton et ne trouve pas.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT c.pseudo, c.titre_concours, c.datelimite, c.remarque, c.url_concours, c.type_concours, c.id_concours,c.datedujour FROM concours c  WHERE  c.datedujour = curdate()  AND c.id_concours Not in (Select ri.id_concours From reponses ri Where ri.id_concours = c.id_concours) AND (c.id_concours, '$login') Not in (Select p.id_concours, p.pseudo From perso p WHERE p.id_concours = c.id_concours and p.pseudo='$login') ORDER BY datelimite");

    Merci.

  2. #2
    Membre Expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Par défaut
    BOnjour,

    Est-ce qu'il ne faut pas définir les alias des tables en MySQL avec AS ?

    Je ne suis pas sur mais il se peut que ce soit ton erreur.
    Il me semble avoir eu le cas avec une version assez ancienne de MySQL.
    Il te manque aussi pour l'orderby le nom de la table devant le champs comme préfixe.
    Peut être il y a un problème de casse (un champ en majuscule quelque part dans ta base).
    En espérant t'avoir aidé, tiens nous au courant

    Cordialement,
    Christophe

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut
    J'ai essayer ta solution mais ca ne fonctionne pas. J'ai même mis la valeur de la variable directement dans la requête, même résultat.

  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
    Quel resultat obtiens-tu quand tu executes ta requêtes via PHP ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut
    L'enregistrement de la table perso ne devrait pas s'afficher car le
    ID est le même ainsi que le pseudo qui est égal à $login(fost).

    Table concours:

    ID
    34 sddss sdsd http://www.ebay.ca sdsd sds 2010-03-25 2010-03-19 sdsd

    Table perso :

    ID Pseudo
    34 fost 2010-03-17 2010-03-26 sdsd http://www.ebay.ca


    J'ai fais un explain dans Phpmyadmin, il semble que le 2ieme WHERE est en problème. voici le résultat :


    3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Comme ça, au feeling, j'ai l'impression que les sous requêtes ne seraient pas si indispensables.

    Est ce que cette requête retourne les lignes attendues ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql = "SELECT c.pseudo, ... etc ...
    FROM concours c
    JOIN reponses ri ON ri.id_concours != c.id_concours
    JOIN perso p ON p.id_concours = c.id_concours
    WHERE c.datedujour = curdate()
    AND p.pseudo = '$login'
    ORDER BY datelimite";
    Ce qui m'intrigue le plus, c'est ceci : AND (c.id_concours, '$login') NOT IN (SELECT ... )
    Qu'est ce que cela doit faire, récupérer ?
    La syntaxe est elle correcte d'ailleurs ? (il me semble que non)

    Sans garantie

  7. #7
    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
    Je confirme ce que dit RunCodePHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND (c.id_concours, '$login')
    Ceci ne correspond à rien, je suis d'ailleurs étonné que cela passe dans un IDE de requête SQL.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut
    Bonjour,

    Je vais essayer d'être plus précis.

    J'ai trois tables (concours - reponses- perso). Si les données de la table concours se retrouve dans la table reponse on ne récupère pas les données et si les données et le $login se retrouvent dans la table perso on ne rupère rien -> Not in (Select p.id_concours, p.pseudo From perso as p WHERE p.id_concours = c.id_concours and p.pseudo='fost')


    Exemple :
    J'ai un site Web qui permet aux gens d'aller s'inscrire à des concours. Quand un membre s'inscrit à un concours, je récupère les données du concours et les insèrent dans une table (perso). Quand le membre revient sur le site, il ne voit plus ce concours car il s'y est déjà inscrit d'ou le pourquoi de comparer le id_concours et le pseudo de la table perso.

    En espèrant avoir été plus clair.

  9. #9
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Alors peut être faudrait il modifier cette condition :
    AND p.pseudo = '$login'
    par :
    AND p.pseudo != '$login'


    Concernant la table "response", à mon avis elle ne sert pas à grand chose dans ce cas là, la requête devrait se simplifier.
    Si je comprends bien, c'est la table "perso" qui contient avant tout l'ID du concourt et le pseudo de la personne.
    Donc que la table "response" a une ligne ou pas de cette personne ne changerait rien.
    C'est la table "perso" l'élément le plus important, non ?

    En somme, on récupère les concours ou la personne ne s'est pas inscrite.
    C'est ça ou pas ?


    Si il faut récupérer quand même les concours où il n'y pas eus de réponses (table response) malgré que la personne soit inscrite (table perso), c'est légèrement différent.
    Faudrait préciser.


    Je me demande si cette requête ne serait pas suffisante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $sql = "SELECT c.pseudo, ... etc ...
    FROM concours c
    JOIN perso p ON p.id_concours = c.id_concours
    WHERE p.pseudo != '$login'
    AND c.datedujour = curdate()
    ORDER BY datelimite";
    Si c'est trop restrictif, alors une sous requête effectivement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql = "SELECT c.pseudo, ... etc ...
    FROM concours c
    WHERE c.id_concours NOT IN (SELECT p.id_concours FROM perso p WHERE p.perso = '$login')
    AND c.datedujour = curdate()
    ORDER BY datelimite";
    En essayant ces 2 requêtes, et si ça fonctionne pas correctement, qu'est ce qui est récupérer de trop ?
    Ou bien, quelles sont les lignes manquantes ?

    Question comme ça. Comment ce fait il que la vérification se fasse sur le pseudo ?
    Une personne n'aurait elle pas un ID ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/12/2005, 10h53
  2. Probleme de sous requete DEBUTANT
    Par nashouille dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/09/2005, 11h47
  3. probleme avec requete et sous-requete...
    Par birkoss dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/08/2005, 21h26
  4. probleme de requete (de sous requetes ?)
    Par menoce dans le forum Requêtes
    Réponses: 6
    Dernier message: 08/07/2005, 15h23
  5. probleme de sous requete
    Par JD_Lyon dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 09/04/2004, 22h18

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