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

Requêtes MySQL Discussion :

probleme apparu en ligne


Sujet :

Requêtes MySQL

  1. #1
    Membre actif Avatar de copin
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 231
    Points : 244
    Points
    244
    Par défaut probleme apparu en ligne
    Slt!

    Je pose ma question ici! Desolé si je me plante je sais pas trop ou la mettre.

    J'ai réalisé il y a quelques temps en site en php lié a une base MySQL. Grace a l'équipe de developpez.com je suis arrivé à le develloper au complet!
    Merci a tous d'ailleurs!

    Le site a été mis recemment en ligne et c'est la qu'est le probleme!

    Dans une des pages je realise un menu deroulant par une requete SQL sur ma base de données. En local pas de probleme, les menus se créé correctement, par contre en ligne les menus deroulants reste totalement vide! Et pour etre honete je sais vraiement pas pourquoi! La base est rempli pourtant correctement.

    Le probleme ne doit pas venir d'un probleme de version de SQL sur le serveur car d'aurte requete fonctionne. Donc je voudrais un petit coup de main.

    Voila la requete :
    $query="SELECT nom_type_formation, id_type_formation
    from type_formation
    where id_type_formation
    in (
    select id_type_formation
    from categorie
    where id_formation in (
    select id_formation
    from catalogue
    where id_domaine=".$var."))";

    Le $var contient bien une valeur car je l'utilise dans cette meme page! donc le probleme vient pas de la!


    Merci du coup de main!
    2.21 GigoWatts! 2.21 GigoWatts!!!!!!

  2. #2
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut
    Salut, quelle est la version de mySQL chez ton hébergeur ?
    A tous les coups, tu as une version en locale plus récente qui accepte les requêtes imbriquées ... et pas chez ton hébergeur.
    a+

  3. #3
    Membre actif Avatar de copin
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 231
    Points : 244
    Points
    244
    Par défaut
    Je pense pas que se soit ca! Mais bon on sait jamais! Dans ce cas je peux faire comment pour eviter la requete imbriquer pour réaliser mon menu deroulant?

    Je pense pas que ce soit possible donc ca veut dire que je peux oublier?
    Me trompe?
    2.21 GigoWatts! 2.21 GigoWatts!!!!!!

  4. #4
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Je ne suis pas sûr, mais je pense que ta requête pourrait s'écrire ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $query = 'SELECT t.nom_type_formation, t.id_type_formation
    FROM type_formation AS t
    INNER JOIN categorie USING (id_type_formation)
    INNER JOIN catalogue AS c USING (id_formation)
    WHERE c.id_domaine='.$var;
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  5. #5
    Membre actif Avatar de copin
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 231
    Points : 244
    Points
    244
    Par défaut
    Salut merci pour a reponse! Avec la requete que tu viens de mettre le menu deroulant ce remplis! Par contre petit probleme les valeurs se repete! J'ajoute quoi a la requete pour eviter cela??

    Par contre autre probleme! J'utilisé ce genre de requete pour plusieur menu deroulant! Ca te derange de m'aider pour les "traductions"?

    Voila les autres requetes:

    $query="select id_emploi,nom_emploi from emploi where id_emploi in
    (select id_emploi from debouche where id_formation=".$varia.")";


    select id_emploi,nom_emploi from emploi where id_emploi in
    (select id_emploi from pro where id_pro=".$vari.")";

    $query="SELECT nom_formation, id_formation
    from catalogue
    where id_domaine=".$var."
    and id_formation IN (
    select id_formation
    from categorie
    where id_type_formation=".$vari.")";

    D'avance merci!
    2.21 GigoWatts! 2.21 GigoWatts!!!!!!

  6. #6
    Membre actif Avatar de copin
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 231
    Points : 244
    Points
    244
    Par défaut
    Me suis essayer a la traduction j'obtiens cela:

    pour la premiere
    SELECT k.id_emploi, k_nom_emploi from emploi as k
    INNER JOIN debouche AS l USING (id_emploi)
    where l.id_emploi=".$varia."

    pour la seconde
    SELECT k.id_emploi, k.nom_emploi from emploi as k
    INNER JOIN pro AS j USING (id_emploi)
    where j.id_emploi=".$vari."

    Par contre pour la troisieme je seche je vois pas trop!
    Est ce que je me suis planté?
    et est ce que quelqu'un peut m'aider pour la derniere requete?
    Merci
    2.21 GigoWatts! 2.21 GigoWatts!!!!!!

  7. #7
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    généralement il faut éviter les requêtes imbriquées avec des IN car on a parfois de droles de surprises !
    Voilà une doc qui devrait t'aider : http://sqlpro.developpez.com/cours/optimiser/#L9

  8. #8
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Avant toute chose, sache qu'il existe un forum mysql bien plus adapté à ce genre de questions.

    Ne connaissant pas du tout les structures de tes tables ni les cardinalités maximale des relations il m'est difficile de prévoir les doublons.
    En fait j'ai traduit ta requête un peu "à l'aveuglette".

    Exemple :
    SELECT A FROM T1 WHERE C IN (...);
    revient à dire "Je veux récupérer le champ A de la table T1 quand le champ C à une des valeur qui est dans la liste ...";
    Si cette liste de valeurs est obtenus par la requête :
    SELECT C FROM T2 WHERE D = 0;
    Que l'on peut lire "Récupérer C de la table T2 quand D=0".
    Alors l'imbrication peut se lire : "Récupérer A de la table T1 quand le champ C de la table T1 est identique au C de T2 et que D (de la table T2) vaut 0"
    Ce qui s'écrit en traduisant litéralement le français en sql :
    SELECT T1.A FROM T1, T2 WHERE T1.C=T2.C AND D=0;

    Ça c'est l'ancienne syntaxe des jointure, aujourd'hui on utilise plutôt les JOIN, plus claire selon moi.
    SELECT T1.A
    FROM T1
    INNER JOIN T2 ON (T1.C=T2.C)
    WHERE T2.D=0;

    (par contre pour le USING, voir la doc )


    La différence entre la requête avec la sous requête dans le IN et celle avec la jointure c'est que si dans le premier cas la requête imbriqué retourne deux fois la même valeur, alors elle n'est prise en compte qu'une seul fois.
    Pour la version avec jointure : si dans T2 il existe deux enregistrements avec la même valeur de C et D=0 alors tous less enregistrements de T1 avec un C qui corresspond seront séléctionnés deux fois.
    Et tu dois pouvoir élimier ces doublons en rajoutant un DISTINCT juste après le mot clé SELECT.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  9. #9
    Membre actif Avatar de copin
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 231
    Points : 244
    Points
    244
    Par défaut
    Merci, mais je viens de trouver la reponse!

    Ma derniere requete qui me pose probleme donne la version suivante:

    $query="SELECT C.nom_formation, C.id_formation FROM catalogue C LEFT JOIN categorie D ON (C.id_formation=D.id_formation AND D.id_type_formation=".$vari.")
    WHERE id_domaine=".$var."";

    Merci:!
    2.21 GigoWatts! 2.21 GigoWatts!!!!!!

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

Discussions similaires

  1. Probleme couleur de lignes dans un JTable
    Par hlimaiem dans le forum Composants
    Réponses: 6
    Dernier message: 19/09/2006, 22h28
  2. probleme select : mauvaise ligne récupérée
    Par ffraggy dans le forum Oracle
    Réponses: 5
    Dernier message: 15/06/2006, 08h50
  3. [Upload] probleme upload en ligne
    Par emma des bois dans le forum Langage
    Réponses: 5
    Dernier message: 04/05/2006, 22h03
  4. Problem variable (Cette ligne ne marche pas sous FF)
    Par Death83 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 08/09/2005, 17h52
  5. [PointBase][Probleme] Récupération de ligne
    Par cibouseb dans le forum Autres SGBD
    Réponses: 7
    Dernier message: 28/07/2003, 14h51

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