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 :

comment faire autrement ? pb compatibilité


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut comment faire autrement ? pb compatibilité
    Bonjour,

    Voilà, il y a quelque temps, Antoun m'avait aidé beaucoup à refondre une requête sql.
    l'historique


    si la requête en question fonctionne bien avec mysql 5, elle plante malheureusement sur un serveur mysql 3.23.58. Il semble que cette version n'accepte pas les double select.
    Ma question : peut-on contourner le problème ? si oui, comment ?

    ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT d.id_demande, d.date_demande, site_wi.abreviation_site, 
    c.nom, c.email1, statut_abonnement.statut_ab_court_anglais AS statut_news, 
    pays.pays_lib_anglais, c.commercial_id AS trigramme, d.num_dossier, c.category, 
    c.cycle, d.commentaire AS commentaire,COUNT(*) AS nb FROM 
    ((((((contact c 
    INNER JOIN ( SELECT contact_id, id_demande, date_demande, num_dossier, commentaireWI,site_source, status 
    FROM demande d3 ORDER BY d3.id_demande DESC LIMIT 0,20) AS d ON d.contact_id = c.id_contact) 
    INNER JOIN contact c2 ON c.email1 = c2.email1) 
    INNER JOIN demande d2 ON d2.contact_id = c2.id_contact) 
    LEFT JOIN commercial ON c.commercial_id = commercial.id_commercial) 
    LEFT JOIN pays ON c.pays = pays.id_pays )
    LEFT JOIN site_wi ON d.site_source=site_wi.site_wi )
    LEFT JOIN statut_abonnement ON c.statut_abonnement_id = statut_abonnement.id_statut_abonnement 
    GROUP BY c.email1, d.id_demande ORDER BY id_demande DESC
    msg erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #1064 - You have an error in your SQL syntax near '( SELECT contact_id , id_demande , date_demande , num_dossier , commentaireWI , ' at line 1
    Mieux vaut penser avant d'agir que d'agir en rêvant.

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT contact_id, id_demande, date_demande, num_dossier, commentaireWI,site_source, STATUS 
    FROM demande d3 ORDER BY d3.id_demande DESC LIMIT 0,20
    Ta base s'appelle demande ou d3

    Car si elle s'appelle demande d3, il faut la mettre entre croche.

    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  3. #3
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    ma table s'appelle demande.
    Mieux vaut penser avant d'agir que d'agir en rêvant.

  4. #4
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Salut,

    Donc ta requête ne doit pas être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT contact_id, id_demande, date_demande, num_dossier, commentaireWI,site_source, STATUS 
    FROM demande d3 ORDER BY d3.id_demande DESC LIMIT 0,20
    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT contact_id, id_demande, date_demande, num_dossier, commentaireWI,site_source, STATUS 
    FROM demande ORDER BY id_demande DESC LIMIT 0,20
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  5. #5
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    La syntaxe "FROM demande [AS] d3" est tout à fait valide, et souhaitable/nécessaire dès que la même table revient plusieurs fois dans la même requête.

    Le noeud du problème est que c'est une requête imbriquée qui ne marchera pas avant au moins la 4.1 et même probablement la 5.0. Dans ce cas une simple jointure pourrait suffire mais on perdrait le LIMIT.

    Je pense qu'il faudra faire ça en deux temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TEMPORARY TABLE demande_temp
    SELECT contact_id, id_demande, date_demande, num_dossier,
           commentaireWI, site_source, STATUS
    FROM demande
    ORDER BY id_demande
    DESC LIMIT 0,20
    Et ensuite le reste en se basant sur demande_temp plutôt qu'une requête imbriquée. Comme on prend tout demande_temp et qu'elle n'a pas d'index, je suggère de la mettre en premier.



    PS: Soit dit en passant, le gros tas de paranthèses est très beuark et ne me semble pas nécessaire.

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

Discussions similaires

  1. Comment faire autrement ?
    Par shogatsu dans le forum Hibernate
    Réponses: 0
    Dernier message: 29/04/2011, 20h35
  2. Boucle en mySQL ou comment faire autrement ?
    Par Belod dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/08/2010, 14h21
  3. [C#] Heritage multiple -> comment faire autrement
    Par schnourf dans le forum Windows Forms
    Réponses: 14
    Dernier message: 03/10/2006, 15h14
  4. [PL/SQL] [9i] Comment faire autrement ?
    Par ftrifiro dans le forum Oracle
    Réponses: 4
    Dernier message: 23/03/2006, 14h36
  5. Script qui s'arrète !! Comment faire autrement ?
    Par Xplosif² dans le forum C++
    Réponses: 5
    Dernier message: 25/02/2006, 22h10

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