[Résolu][MySQL]compatibilité et requete

Bonjour,

J’ai un problème de compatibilité, entre MySQL - 3.23.56 (serveur web) et MySQL - 4.1.9 (local).

J’ai fait ma requète en local avec des “left join” qui fonctionne bien, malheureusement mon hebergeur est à une version antérieur de MySQL et bien sur la requète ne fonctionne pas.

Ci-dessous la requete :
[sql]SELECT M.member_log,nb_message,nb_sujet,M.member_id,M.ema il,M.access as Newsletter
FROM member M
LEFT JOIN (select M .member_id,count(G.message_id) as nb_message from member M
LEFT JOIN message G on G.member_id=M.member_id where G.root=0 group by M.member_id) AS nb_mess on M.member_id = nb_mess.member_id
////////// Erreur ici /////////
LEFT JOIN (select M .member_id,count(G.message_id) as nb_sujet from member M
LEFT JOIN message G on G.member_id=M.member_id where G.root=1 group by M.member_id) AS nb_suj on M.member_id = nb_suj.member_id
where date_create < ‘2006-09-19 00:00:00’ and date_create > '2006-09-16 00:00:00’
GROUP BY M.member_id
ORDER BY M.member_log ASC[/sql]

Vous aurez remarqué qu’il y a du left join dans les left join.

L’erreur se trouve donc la ou elle est marqué dans le code

et donc [sql]MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax near ‘( select M . member_id , count( G . message_id ) as nb_message from member M LEF’ at line 1[/sql]

J’ai bien tenté quelques trucs mais rien n’y a fait, et les docs de MySQL 3.23 marquent qu’il y a bien le left join d’implémenté.
Pensez vous qu’il y a un moyen de modifier légèrement la requete pour quelle fonctionne, ou vais-je devoir réécrire ma belle requète qui fonctinnait bien pourtant.

Merci d’avance à tous

Bladebo

de mémoire ce sont les sous requêtes qui ne fonctionnent pas dans les vieilles versions de MySQL.

edit:
http://dev.mysql.com/doc/refman/5.0/fr/rew…subqueries.html

[quote]13.1.8.11. Se passer des sous-requêtes avec les premières versions de MySQL
Jusqu’à la version 4.1, seules les requêtes imbriquées de la forme INSERT … SELECT … et REPLACE … SELECT … étaient supportées. […][/quote]

Merci, mais maintenant je vois pas trop comment reprendre ma requete.

La seule solution que je vois serait de sortir mes 2 LEFT JOIN pour en faire des requetes seules.
mais dans ce cas je devrais faire des boucles pour les liées avec ma requete principal.

N’y a t il pas une solution moins contraignante ?

[quote=“bladebo, post:3, topic: 30934”]La seule solution que je vois serait de sortir mes 2 LEFT JOIN pour en faire des requetes seules. mais dans ce cas je devrais faire des boucles pour les liées avec ma requete principal.[/quote]nan nan nan. L’explication dans l’url c’est de remonter les colonnes de ton sous-select au niveau du select principal. Et de remonter les clauses WHERE de la sous-requête dans le left join.

Bon pas si évident que cela à cause des count. Mais même si les sous-requêtes étaient autorisées ta requête est plutôt lourde.

edit (non testé):
[sql]SELECT M.member_log,M.member_id,M.email,M.access as Newsletter,
count(G0.message_id) as nb_messages,count(G1.message_id) as nb_sujets
FROM member M
LEFT JOIN message G0 on G0.member_id=M.member_id and G0.root=0
LEFT JOIN message G1 on G1.member_id=M.member_id and G1.root=1
where date_create < ‘2006-09-19 00:00:00’ and date_create > '2006-09-16 00:00:00’
GROUP BY M.member_log,M.member_id,M.email,M.access as Newsletter
ORDER BY M.member_log ASC[/sql]