Annonce

#1 2006-09-24 15:48:54

oliviersevin
Membre
Inscription : 2006-09-24
Messages : 3

Re : [résolu] bug sur OVH de mysql4 à mysql5

bonjour,

tout fonctionnait bien sur OVH.. avant qu'il passe mes bases sous MYSQL5...
consequence (que j'ai vu pour l'instant) lorsque je me connecte, impossible d'avoir le nombre de membres, de liste... de la premiere page lorsqu'on se connecte.
voila le message d'erreur :
Impossible d'obtenir le nombre d'inscrits/inscrits en attente

SQL query :
SELECT COUNT(abo_id) AS num_abo, abo_status
FROM wa_abonnes
WHERE abo_id IN(SELECT DISTINCT(abo_id)
FROM wa_abo_liste
WHERE liste_id IN(1, 3, 2))
GROUP BY abo_status

SQL errno : 1064
SQL error : You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT DISTINCT(abo_id) FROM wa_abo_liste WHERE liste_id IN

Fichier : index.php Ligne : 77


voila, pouvez vous m'aider?
merci
olivier

nb : je n'ai pas encore verifie que l'envoi de mail fonctionne..

Hors ligne

#2 2006-09-26 17:08:25

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : [résolu] bug sur OVH de mysql4 à mysql5

Et si vous éditez le fichier admin/index.php et remplacez à la ligne 43 :

$sql_abo_ids = "SELECT DISTINCT(abo_id)

par:

$sql_abo_ids = "SELECT abo_id

Ça passe mieux ?


PHP et MySQL, un duo gagnant !

Hors ligne

#3 2006-09-27 22:33:09

oliviersevin
Membre
Inscription : 2006-09-24
Messages : 3

Re : [résolu] bug sur OVH de mysql4 à mysql5

bonsoir, nan, pareil.. meme erreur..
par contre, les envois et tout le reste fonctionne... le nombre d inscrit dans les autres menus.. impec..
sauf à la connexion.. meme msg malgre le changement de code..

Hors ligne

#4 2006-10-05 22:42:47

kayou
Membre
Lieu : 77 - Champs / Marne
Inscription : 2006-06-28
Messages : 25
Site Web

Re : [résolu] bug sur OVH de mysql4 à mysql5

Sur OVH, avec # Version du client MySQL: 5.0.18

le script suivant marche.

SELECT abo.abo_status, count( abo.abo_id ) AS nb_abo
FROM wa_abonnes abo, wa_abo_liste lis
WHERE abo.abo_id = lis.abo_id
AND lis.liste_id
IN ( 2, 4 )
GROUP BY abo.abo_status

Hors ligne

#5 2006-10-05 23:38:15

oliviersevin
Membre
Inscription : 2006-09-24
Messages : 3

Re : [résolu] bug sur OVH de mysql4 à mysql5

ok merci pour le code...
mais comment je l integre à la page ?
je ne suis pas programmeur php... et encore moins l auteur de WAnewsletter

Hors ligne

#6 2006-10-06 12:36:34

kayou
Membre
Lieu : 77 - Champs / Marne
Inscription : 2006-06-28
Messages : 25
Site Web

Re : [résolu] bug sur OVH de mysql4 à mysql5

Je n'ai pas pu essayer la modif.

Recopie le fichier index.php en index.php.v0

Remplace le code ci-dessous

    $sql = "SELECT COUNT(abo_id) AS num_abo, abo_status
        FROM " . ABONNES_TABLE . "
        WHERE abo_id IN($sql_abo_ids)
        GROUP BY abo_status";

par celui ci

    /* Modification SQL Pierre Roger  06/10/2006
    **    Suppression du sous-select avec $sql_abo_ids
        **    Remplacement par une jointure
    **    entre wa_abonnes et wa_abo_liste
    **$sql = "SELECT COUNT(abo_id) AS num_abo, abo_status
        **FROM " . ABONNES_TABLE . "
        **WHERE abo_id IN($sql_abo_ids)
        **GROUP BY abo_status";
    */
    $sql = "SELECT COUNT(abo_id) AS num_abo, abo_status
        FROM " . ABONNES_TABLE . " abo, " . ABO_LISTE_TABLE . " lis
        WHERE abo.abo_id = lis.abo_id
        AND    lis.liste_id IN($sql_liste_ids).
        GROUP BY abo_status";

Peux-tu faire un essai et renvoyer le résultat. OK ou KO ?

Hors ligne

#7 2006-10-06 12:58:46

kayou
Membre
Lieu : 77 - Champs / Marne
Inscription : 2006-06-28
Messages : 25
Site Web

Re : [résolu] bug sur OVH de mysql4 à mysql5

Petite erreur dans ce que j'ai posté.

Remplacer ma précédente proposition par :

/* Modification SQL P. Roger - EMERA 06/10/2006
    **    Suppression du sous-select avec $sql_abo_ids
        **    Remplacement par une jointure
    **    entre wa_abonnes et wa_abo_liste
    **$sql = "SELECT COUNT(abo_id) AS num_abo, abo_status
        **FROM " . ABONNES_TABLE . "
        **WHERE abo_id IN($sql_abo_ids)
        **GROUP BY abo_status";
    */
    $sql = "SELECT COUNT(abo.abo_id) AS num_abo, abo_status
        FROM " . ABONNES_TABLE . " abo, " . ABO_LISTE_TABLE . " lis
        WHERE abo.abo_id = lis.abo_id
        AND    lis.liste_id IN($sql_liste_ids)
        GROUP BY abo_status";

Hors ligne

#8 2006-10-11 19:48:59

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : [résolu] bug sur OVH de mysql4 à mysql5

Malheureusement, ça n'ira pas. Avec votre requête, les abonnés inscrits à plusieurs listes seront comptés une fois pour chaque liste.

Quelle est l'erreur renvoyée par mysql 5 pour une telle requête ? :

SELECT COUNT(abo_id) AS num_abo, abo_status
FROM wa_abonnes
WHERE abo_id IN(SELECT abo_id
FROM wa_abo_liste
WHERE liste_id IN(1, 3, 2))
GROUP BY abo_status

(Adapter les identifiants de liste si besoin)


PHP et MySQL, un duo gagnant !

Hors ligne

#9 2006-10-12 18:30:48

kayou
Membre
Lieu : 77 - Champs / Marne
Inscription : 2006-06-28
Messages : 25
Site Web

Re : [résolu] bug sur OVH de mysql4 à mysql5

Voila ce que donne l'exécution sur OVH

Jeu de tests :
Il y a 2 signataires pour la liste 2 et 3 pour la liste 4.
L'abo_id 1 signe dans la liste 2 et 4
Ce qui fait au total 4 signataires, toutes listes confondues.

SELECT liste_id, abo_id
FROM wa_abo_liste
WHERE liste_id IN ( 2, 4 ) 
                                         liste_id   abo_id

    Modifier     Effacer     2     1
    Modifier     Effacer     4     1
    Modifier     Effacer     2     2
    Modifier     Effacer     4     460
    Modifier     Effacer     4     1603

Quand j'exécute la requête complète, voici le résultat

Erreur

requête SQL: Documentation

SELECT COUNT( abo_id ) AS num_abo, abo_status
FROM wa_abonnes
WHERE abo_id IN (
SELECT abo_id FROM wa_abo_liste
WHERE liste_id IN ( 2, 4 )
)
GROUP BY abo_status

MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT abo_id  FROM wa_abo_liste  WHERE liste_id  IN ( 2 , 4 ) 

A ma requête proposée précédemment, j'ai rajouté la clause DISTINCT dans le count( abo.abo_id). Le résultat est juste.
Dans mon exemple, il y a effectivement 4 signataires distincts

SELECT abo.abo_status, count( DISTINCT abo.abo_id ) AS nb_abo
FROM wa_abonnes abo, wa_abo_liste lis
WHERE abo.abo_id = lis.abo_id
AND lis.liste_id
IN ( 2, 4 )
GROUP BY abo.abo_status

 abo_status       nb_abo
     1                      4

Hors ligne

#10 2006-10-13 02:35:36

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : [résolu] bug sur OVH de mysql4 à mysql5

A ma requête proposée précédemment, j'ai rajouté la clause DISTINCT dans le count( abo.abo_id). Le résultat est juste.
Dans mon exemple, il y a effectivement 4 signataires distincts

Je ne peux pas utiliser COUNT(DISTINCT(field)). SQLite ne le gère pas avant la version 3.1 je crois  sad

Que donne la requête suivante :

SELECT COUNT(a.abo_id) AS num_subscribe
FROM wa_abonnes AS a
WHERE a.abo_id IN(
    SELECT al.abo_id
    FROM wa_abo_liste AS al
    WHERE al.liste_id IN(2, 4)
        AND al.confirmed = 1
)
AND a.abo_status = 1

C'est tiré de options/extra.php.

Si ça marche, essayez :

SELECT COUNT(a.abo_id) AS num_subscribe, a.abo_status
FROM wa_abonnes AS a
WHERE a.abo_id IN(
    SELECT al.abo_id
    FROM wa_abo_liste AS al
    WHERE al.liste_id IN(2, 4)
        AND al.confirmed = 1
)
GROUP BY a.abo_status

PHP et MySQL, un duo gagnant !

Hors ligne

#11 2006-10-13 21:06:42

kayou
Membre
Lieu : 77 - Champs / Marne
Inscription : 2006-06-28
Messages : 25
Site Web

Re : [résolu] bug sur OVH de mysql4 à mysql5

C'est toujours en erreur.

Il semble que l'erreur soit du au SUBSELECT dans la clause IN. J'ai fait plusieurs tests en simplifiant les clauses et toujours la même erreur.

Erreur

requête SQL: Documentation

SELECT COUNT( a.abo_id ) AS num_subscribe
FROM wa_abonnes AS a
WHERE a.abo_id
IN (

SELECT al.abo_id
FROM wa_abo_liste AS al
WHERE al.liste_id
IN ( 2, 4 )
AND al.confirmed =1
)
AND a.abo_status =1

MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT al.abo_id
   FROM wa_abo_liste AS al
   WHERE al.liste 

Hors ligne

#12 2006-10-16 07:00:18

kayou
Membre
Lieu : 77 - Champs / Marne
Inscription : 2006-06-28
Messages : 25
Site Web

Re : [résolu] bug sur OVH de mysql4 à mysql5

J'ai posé la question à OVH et obtenu la réponse suivante :

Les serveurs 4.0 n'ont pas été migré en 5.0, pour bénéficier de mysql 5.0 il faut créer une nouvelle base (toutes les nouvelles bases sont automatiquement créé en 5.0), une solution pour les utilisateurs qui n'ont plus la possibilité de créer de nouvelle bases devrait être disponible bientôt.

Cela expliquerait le problème du bug sur la clause abo_id IN(SELECT .....

En relisant le post initial deoliviersin qui rencontre ce problème depuis qu'ils ont passé ses bases sous MySQL5.

Personnellement, je n'ai pas rencontré de problème SQL dans l'interface. Les tests que j'ai fait pour ce post, l'ont été à travers phpMyAdmin.

Hors ligne

#13 2006-10-16 17:56:22

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : [résolu] bug sur OVH de mysql4 à mysql5

Je ne vous suis plus là.
Les tests que vous faites et qui donnent une erreur de syntaxe, c'est sur un serveur MySQL 4.0 ou MySQL 5.0 ?

Normalement, c'est indiqué sur la page d'accueil de votre installation de phpmyadmin. Sinon, exécutez la requête suivante:

SELECT VERSION()

PHP et MySQL, un duo gagnant !

Hors ligne

#14 2006-10-16 23:03:36

kayou
Membre
Lieu : 77 - Champs / Marne
Inscription : 2006-06-28
Messages : 25
Site Web

Re : [résolu] bug sur OVH de mysql4 à mysql5

Bonsoir,

J'ai vérifié la version, il s'agit bien d'une version 4.0.25 :

Textes complets
VERSION()
4.0.25-standard-log

Sur la page de garde de phpmyadmin, c'était bien indiqué la version 4.0.25 mais également Version du client MySQL: 5.0.18.

D'où mon erreur initiale :???: .
Mais je trouve bizarre d'avoir ces 2 version différentes affichées sur la même page .... :tss:

MySQL - 4.0.25-standard-log

    * Version du protocole: 10
    * Serveur: sql8 via TCP/IP
    * Utilisateur: toto@1.1.1.1
    * Créer une base de données: Documentation
      aucun privilège
    * Quitter 

phpMyAdmin - OVH

    * Version du client MySQL: 5.0.18
    * Extensions PHP utilisées: mysql
    *
      Language Info:
    *
      Thème / Style:
    * Documentation de phpMyAdmin
    * Site officiel de phpMyAdmin 

Hors ligne

#15 2006-10-16 23:25:28

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : [résolu] bug sur OVH de mysql4 à mysql5

Ok, ça a le mérite d'expliquer le pourquoi des erreurs de syntaxe rapportées par MySQL. MySQL 4.0 ne supporte pas les sous-requêtes.

Le client MySQL dont il est fait mention est l'API écrite en C proposée par MySQL pour utilisation dans des applications tierces (entre autres PHP). Il n'est pas rare que le numéro de version ne soit pas le même que celui du serveur MySQL.

Mais je suis quand même fautif car je pars du principe que sir l'extension PHP mysqli est présente, on a forcément derrière un serveur MySQL 4.1 ou supérieur ce qui n'est pas le cas ici.

Je vais réfléchir à un correctif…


PHP et MySQL, un duo gagnant !

Hors ligne

#16 2006-10-16 23:55:27

kayou
Membre
Lieu : 77 - Champs / Marne
Inscription : 2006-06-28
Messages : 25
Site Web

Re : [résolu] bug sur OVH de mysql4 à mysql5

Une solution pour contourner serait de créer une table temporaire qui serait utilisée en direct dans la requete principale.

Mais je ne sais pas si ça marche également sur SQLLITE et si ça n'alourdit pas trop l'ensemble.

Hors ligne

#17 2006-10-17 00:12:09

Bobe
Administrateur
Lieu : La Rochelle
Inscription : 2002-05-27
Messages : 5 299

Re : [résolu] bug sur OVH de mysql4 à mysql5

Voilà qui est corrigé sur la version de développement:
http://dev.webnaute.net/wanewsletter/trac/changeset/404

La solution portait sur une meilleure détection des possibilités du serveur mysql en face. J'ai ajouté une vérification pour n'autoriser l'utilisation des subselect dans wanewsletter que si le serveur mysql est >= 4.1.0


PHP et MySQL, un duo gagnant !

Hors ligne

Pied de page des forums