Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur syntaxe SQL près de UNION SELECT

Sujet résolu
    22 février 2011 à 0:45:25

    Bonjour à tous,

    J'ai un petit soucis avec une requete SQL ...

    Voila, j'ai 2 tables qui sont les suivantes :

    PAPERBLOG
    id_paperblog
    id-utilisateur_source
    id_utilisateur_destination
    annonce
    date
    heure

    COLLABORATEURS
    id_utilisateur
    id_collaborateur
    etat

    je souhaite afficher toutes les annonces de l'utilisateur enregistré sur mon site ainsi que celles de ses collaborateurs (identifiés dans la table COLLABORATEURS).

    Ma requete est la suivante :

    SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination
    FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_collaborateur=paperblog.id_utilisateur_source
    WHERE collaborateurs.id_utilisateur=$user
    UNION SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination
    FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_utilisateur=paperblog.id_utilisateur_source
    WHERE collaborateurs.id_collaborateur=$user AND collaborateurs.etat=1 ORDER BY paperblog.date ASC,paperblog.heure ASC"

    Cela dit, SQL me renvoi une erreur qui est la suivante :

    Erreur : 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 'UNION SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visib' at line 1

    Si une ame charitable pouvait m'aider (ou plutot un connaisseur averti sur SQL), ce serait vraiment super sympa ??

    Merci d'avance ...
    • Partager sur Facebook
    • Partager sur Twitter
      22 février 2011 à 0:50:48

      Il me semble que tu dois entourer tes SÉLECT par des parenthèses () comme pour des requêtes imbriquées.
      • Partager sur Facebook
      • Partager sur Twitter
      Erreur PDO - Installation Wamp - Docs PHP et MYSQL.
        22 février 2011 à 1:09:10

        salut b-dav,

        tout d'abord merci de me répondre ...

        En fait, j'ai essayer avec les parenthèses et c'est pareil :

        Erreur : 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 ') UNION (SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.vi' at line 1

        pourtant j'suis persuadé que c'est une connerie, mais je vois pas ! lol !

        Une autre piste ??
        • Partager sur Facebook
        • Partager sur Twitter
          22 février 2011 à 10:00:56

          On peut voir le code PHP ? Mon petit doigt me dit que c'est de là que vient le problème...
          • Partager sur Facebook
          • Partager sur Twitter
            22 février 2011 à 11:02:08

            voici le code PHP comme demandé (c'est chaud je galère depuis toute la nuit !lol) :

            $user = $_SESSION['id_utilisateur'];

            $db=mysql_select_db($database_dbprotect, $dbprotect)
            or die ("La base de données ne peut etre selectionnée !");

            @$start = $_REQUEST['start'];
            if ($start=="")
            {@$start = $_GET['start'];}

            if(!$start) {$start=0;}

            @$commande= $_REQUEST['commande']; // On récupere la commande sql passée soit par un formulaire soit par l'adresse
            if($commande=="")
            {@$commande="(SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_collaborateur=paperblog.id_utilisateur_source WHERE collaborateurs.id_utilisateur=$user) UNION (SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_utilisateur=paperblog.id_utilisateur_source WHERE collaborateurs.id_collaborateur=$user AND collaborateurs.etat=1)";}

            $select_case = sprintf($commande);
            $result_case = mysql_query($select_case, $dbprotect) or die ('Erreur : '.mysql_error() );
            $total_case = mysql_num_rows($result_case);

            @$page = $_REQUEST['page'];
            if (!$page)
            {@$page=1;}

            $select_case = $commande." LIMIT $start,20";
            $result_case = mysql_query($select_case) or die ('Erreur : '.mysql_error() );
            $total_case = mysql_num_rows($result_case);

            if($total_case) {
            // début du tableau
            echo '<table width="95%" border="0" cellspacing="0">'."\n";
            // lecture et affichage des résultats, 1 résultat par ligne.
            while($row_case = mysql_fetch_array($result_case)) {
            echo '<tr bgcolor="#FFFFFF" onMouseOver="style.backgroundColor=\'#ffe7d6\'" onMouseOut="style.backgroundColor=\'\'">';
            $utilisateur = $row_case['id_utilisateur_source'];
            // requete sur la table UTILISATEURS (on récupère les infos sur l'utilisateur)
            $utilisateur_query=sprintf("SELECT * FROM utilisateurs WHERE id_utilisateur='$utilisateur'"); // requête sur la base UTILISATEURS
            $utilisateur_verif = mysql_query($utilisateur_query, $dbprotect) or die(mysql_error());
            $row_utilisateur = mysql_fetch_assoc($utilisateur_verif);
            $photo_utilisateur = $row_utilisateur['login'];
            $filename = 'photos/'.$photo_utilisateur.'.jpg';
            if (file_exists($filename))
            {echo'<td align="center" valign="top" width="70"><a href="profil.php?user='.($row_case['id_utilisateur_source']).'"><img src="photos/'. $photo_utilisateur.'.jpg" alt="" width="60" height="75"/></a></td>';}
            else {
            echo'<td align="center" valign="top" width="70"><a href="profil.php?user='.($row_case['id_utilisateur_source']).'"><img src="photos/problog.jpg" alt="" width="60" height="75" style="border: 1px solid #996633"/></a></td>';
            }
            $tab = explode("-",$row_case['date']);
            $annee = $tab[0];
            $mois = $tab[1];

            if($mois==1)$mois='jan.';
            if($mois==2)$mois='fév.';
            if($mois==3)$mois='mar.';
            if($mois==4)$mois='avr.';
            if($mois==5)$mois='mai';
            if($mois==6)$mois='juin';
            if($mois==7)$mois='juil.';
            if($mois==8)$mois='août';
            if($mois==9)$mois='sept.';
            if($mois==10)$mois='oct.';
            if($mois==11)$mois='nov.';
            if($mois==12)$mois='déc.';

            $jour = $tab[2];

            $jourTXT = date ("D",strtotime($row_case['date']));

            if($jourTXT=="Mon")$jourTXT='Lundi';
            if($jourTXT=="Thu")$jourTXT='Mardi';
            if($jourTXT=="Wed")$jourTXT='Mercredi';
            if($jourTXT=="Thi")$jourTXT='Jeudi';
            if($jourTXT=="Fri")$jourTXT='Vendredi';
            if($jourTXT=="Sat")$jourTXT='Samedi';
            if($jourTXT=="Sun")$jourTXT='Dimanche';

            $dateFR=$jour." ".$mois." ".$annee;
            echo '<td align="left" valign="top">'.$row_utilisateur['prenom'].' '.$row_utilisateur['nom'].'<BR/><BR/>'.$row_case['annonce'].'<BR/><BR/>Le '.$jourTXT.' '.$dateFR.' a '.$row_case['heure'].'</td>';

            echo '</td>';
            echo '</tr>';
            }
            echo '</table>'."\n";
            // fin du tableau.
            }
            else echo '<font size="2" color="#996633"><b>Il y a actuellement aucune annonce dans votre paperblog !</b></font>';

            // on libère le résultat
            mysql_free_result($result_case);

            @$start = $_REQUEST['start'];
            if ($start=="")
            {@$start = $_GET['start'];}

            if(!$start) {$start=0;}

            @$commande= $_REQUEST['commande']; // On récupere la commande sql passée soit par un formulaire soit par l'adresse
            if($commande=="")
            {@$commande= "SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_collaborateur=paperblog.id_utilisateur_source WHERE collaborateurs.id_utilisateur=$user UNION SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_utilisateur=paperblog.id_utilisateur_source WHERE collaborateurs.id_collaborateur=$user AND collaborateurs.etat=1 ORDER BY paperblog.date ASC,paperblog.heure ASC";}

            $select_case = $commande;
            $result_case = mysql_query($select_case) or die ('Erreur : '.mysql_error() );
            $total_case = mysql_num_rows($result_case);

            @$page = $_REQUEST['page'];
            if (!$page)
            {@$page=1;}

            echo '<BR>';
            echo '<table width="95%" border="0" cellspacing="0">'."\n";
            echo '<tr>';
            echo '<td align="left" valign="center" width="50%">';
            //Affichage "Page précèdente"
            if($start>0){
            echo("<a href=\"accueil.php?commande=$commande&page=".($page-1)."&start=".($start-20)."\"><font size=\"1\"; face=\"Verdana, Arial, Helvetica, sans-serif\" color=\"#663300\"><b><< Page pr&eacute;c&eacute;dente</b></font></a>");
            echo '</td>';}
            else {echo '</td>';}
            echo '<td align="right" valign="center" width="50%">';
            //Affichage "Page suivante"
            if($total_case>$start+20){
            echo("<a href=\"accueil.php?commande=$commande&page=".($page+1)."&start=".($start+20)."\"><font size=\"1\"; face=\"Verdana, Arial, Helvetica, sans-serif\" color=\"#663300\"><b>Page suivante >></b></font></a>");
            echo '</td>';}
            else {echo '</td>';}
            echo '</tr>';

            tu crois vraiment que c'est dans le PHP ??
            • Partager sur Facebook
            • Partager sur Twitter
              22 février 2011 à 11:04:28

              Fais des

              echo $commande;

              juste au dessus des lignes qui pose problème et mets-nous ce que ça affiche.
              • Partager sur Facebook
              • Partager sur Twitter
                22 février 2011 à 11:20:37

                voici le code avec les 'echo $commande;' :

                $user = $_SESSION['id_utilisateur'];

                $db=mysql_select_db($database_dbprotect, $dbprotect)
                or die ("La base de données ne peut etre selectionnée !");

                @$start = $_REQUEST['start'];
                if ($start=="")
                {@$start = $_GET['start'];}

                if(!$start) {$start=0;}

                @$commande= $_REQUEST['commande']; // On récupere la commande sql passée soit par un formulaire soit par l'adresse
                if($commande=="")
                echo $commande;
                {@$commande="(SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_collaborateur=paperblog.id_utilisateur_source WHERE collaborateurs.id_utilisateur=$user) UNION (SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_utilisateur=paperblog.id_utilisateur_source WHERE collaborateurs.id_collaborateur=$user AND collaborateurs.etat=1)";}
                echo $commande;
                $select_case = sprintf($commande);
                echo $commande;
                $result_case = mysql_query($select_case, $dbprotect) or die ('Erreur : '.mysql_error() );
                echo $commande;
                $total_case = mysql_num_rows($result_case);
                echo $commande;

                @$page = $_REQUEST['page'];
                if (!$page)
                {@$page=1;}

                $select_case = $commande." LIMIT $start,20";
                echo $commande;
                $result_case = mysql_query($select_case) or die ('Erreur : '.mysql_error() );
                echo $commande;
                $total_case = mysql_num_rows($result_case);
                echo $commande;

                if($total_case) {
                // début du tableau
                echo '<table width="95%" border="0" cellspacing="0">'."\n";
                // lecture et affichage des résultats, 1 résultat par ligne.
                while($row_case = mysql_fetch_array($result_case)) {
                echo '<tr bgcolor="#FFFFFF" onMouseOver="style.backgroundColor=\'#ffe7d6\'" onMouseOut="style.backgroundColor=\'\'">';
                $utilisateur = $row_case['id_utilisateur_source'];
                // requete sur la table UTILISATEURS (on récupère les infos sur l'utilisateur)
                $utilisateur_query=sprintf("SELECT * FROM utilisateurs WHERE id_utilisateur='$utilisateur'"); // requête sur la base UTILISATEURS
                $utilisateur_verif = mysql_query($utilisateur_query, $dbprotect) or die(mysql_error());
                $row_utilisateur = mysql_fetch_assoc($utilisateur_verif);
                $photo_utilisateur = $row_utilisateur['login'];
                $filename = 'photos/'.$photo_utilisateur.'.jpg';
                if (file_exists($filename))
                {echo'<td align="center" valign="top" width="70"><a href="profil.php?user='.($row_case['id_utilisateur_source']).'"><img src="photos/'. $photo_utilisateur.'.jpg" alt="" width="60" height="75"/></a></td>';}
                else {
                echo'<td align="center" valign="top" width="70"><a href="profil.php?user='.($row_case['id_utilisateur_source']).'"><img src="photos/problog.jpg" alt="" width="60" height="75" style="border: 1px solid #996633"/></a></td>';
                }
                $tab = explode("-",$row_case['date']);
                $annee = $tab[0];
                $mois = $tab[1];

                if($mois==1)$mois='jan.';
                if($mois==2)$mois='fév.';
                if($mois==3)$mois='mar.';
                if($mois==4)$mois='avr.';
                if($mois==5)$mois='mai';
                if($mois==6)$mois='juin';
                if($mois==7)$mois='juil.';
                if($mois==8)$mois='août';
                if($mois==9)$mois='sept.';
                if($mois==10)$mois='oct.';
                if($mois==11)$mois='nov.';
                if($mois==12)$mois='déc.';

                $jour = $tab[2];

                $jourTXT = date ("D",strtotime($row_case['date']));

                if($jourTXT=="Mon")$jourTXT='Lundi';
                if($jourTXT=="Thu")$jourTXT='Mardi';
                if($jourTXT=="Wed")$jourTXT='Mercredi';
                if($jourTXT=="Thi")$jourTXT='Jeudi';
                if($jourTXT=="Fri")$jourTXT='Vendredi';
                if($jourTXT=="Sat")$jourTXT='Samedi';
                if($jourTXT=="Sun")$jourTXT='Dimanche';

                $dateFR=$jour." ".$mois." ".$annee;
                echo '<td align="left" valign="top">'.$row_utilisateur['prenom'].' '.$row_utilisateur['nom'].'<BR/><BR/>'.$row_case['annonce'].'<BR/><BR/>Le '.$jourTXT.' '.$dateFR.' a '.$row_case['heure'].'</td>';

                echo '</td>';
                echo '</tr>';
                }
                echo '</table>'."\n";
                // fin du tableau.
                }
                else echo '<font size="2" color="#996633"><b>Il y a actuellement aucune annonce dans votre paperblog !</b></font>';

                // on libère le résultat
                mysql_free_result($result_case);

                @$start = $_REQUEST['start'];
                if ($start=="")
                {@$start = $_GET['start'];}

                if(!$start) {$start=0;}

                @$commande= $_REQUEST['commande']; // On récupere la commande sql passée soit par un formulaire soit par l'adresse
                if($commande=="")
                {@$commande= "SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_collaborateur=paperblog.id_utilisateur_source WHERE collaborateurs.id_utilisateur=$user UNION SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_utilisateur=paperblog.id_utilisateur_source WHERE collaborateurs.id_collaborateur=$user AND collaborateurs.etat=1 ORDER BY paperblog.date ASC,paperblog.heure ASC";}

                $select_case = $commande;
                $result_case = mysql_query($select_case) or die ('Erreur : '.mysql_error() );
                $total_case = mysql_num_rows($result_case);

                @$page = $_REQUEST['page'];
                if (!$page)
                {@$page=1;}

                echo '<BR>';
                echo '<table width="95%" border="0" cellspacing="0">'."\n";
                echo '<tr>';
                echo '<td align="left" valign="center" width="50%">';
                //Affichage "Page précèdente"
                if($start>0){
                echo("<a href=\"accueil.php?commande=$commande&page=".($page-1)."&start=".($start-20)."\"><font size=\"1\"; face=\"Verdana, Arial, Helvetica, sans-serif\" color=\"#663300\"><b><< Page pr&eacute;c&eacute;dente</b></font></a>");
                echo '</td>';}
                else {echo '</td>';}
                echo '<td align="right" valign="center" width="50%">';
                //Affichage "Page suivante"
                if($total_case>$start+20){
                echo("<a href=\"accueil.php?commande=$commande&page=".($page+1)."&start=".($start+20)."\"><font size=\"1\"; face=\"Verdana, Arial, Helvetica, sans-serif\" color=\"#663300\"><b>Page suivante >></b></font></a>");
                echo '</td>';}
                else {echo '</td>';}
                echo '</tr>';



                et voici les messages affichés sur ma page :


                (SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_collaborateur=paperblog.id_utilisateur_source WHERE collaborateurs.id_utilisateur=) UNION (SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_utilisateur=paperblog.id_utilisateur_source WHERE collaborateurs.id_collaborateur= AND collaborateurs.etat=1)(SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_collaborateur=paperblog.id_utilisateur_source WHERE collaborateurs.id_utilisateur=) UNION (SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.visible, paperblog.id_utilisateur_destination FROM collaborateurs INNER JOIN paperblog ON collaborateurs.id_utilisateur=paperblog.id_utilisateur_source WHERE collaborateurs.id_collaborateur= AND collaborateurs.etat=1)Erreur : 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 ') UNION (SELECT paperblog.annonce, paperblog.date, paperblog.heure, paperblog.vi' at line 1
                • Partager sur Facebook
                • Partager sur Twitter
                  22 février 2011 à 11:23:16

                  C'est bien ce que je pensais. Ca t'affiche les requetes que tu fais. Regarde juste avant les UNION...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 février 2011 à 11:26:08

                    heuu oui o_O

                    et qu'est ce que je dois faire exactement avant les UNION ??
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 février 2011 à 11:29:11

                      Réfléchis, regarde ta requête et comment tu la construis, et essaye de comprendre le problème... Franchement, je t'ai plus que mis sur la voie là
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 février 2011 à 11:40:16

                        Oui c'est sur... en tout cas, merci taguan de te pencher sur le sujet et de m'avoir apporter ces réponses.


                        En fait, je souhaite afficher toutes les annonces de l'utilisateur enregistré sur mon site ainsi que celles de ses collaborateurs (identifiés dans la table COLLABORATEURS).

                        Les messages sont enregistrés dans la table 'PAPERBLOG'
                        La table 'COLLABORATEURS' permet de valider quels utilisateurs sont "amis" (validé si le champ etat=1)

                        Donc, l'utilisateur 'TOTO' se connecte sur mon site (avec par ex: id_utilisateur=1).
                        J'aimerais afficher tous les messages (champs 'annonce', 'date', 'heure' de la table PAPERBLOG) de l'utilisateur TOTO ainsi que tous ses collaborateurs (validés dans la table COLLABORATEURS).


                        Peut-être serait-ce plus simple que je demande la requete SQL correspondant à mes attentes ??



                        Voici les tables :

                        UTILISATEURS
                        id_utilisateur
                        login
                        password
                        prenom
                        nom
                        etc...

                        PAPERBLOG
                        id_paperblog
                        id-utilisateur_source
                        id_utilisateur_destination
                        visible
                        annonce
                        date
                        heure

                        COLLABORATEURS
                        id_utilisateur
                        id_collaborateur
                        etat

                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 février 2011 à 11:45:53

                          Ok... J'ai compris... Je t'explique que ton erreur vient du PHP, du coup tu me demandes la commande SQL correcte ??

                          Le problème c'est que ta variable $user ne contient rien !!!!!!!!
                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 février 2011 à 12:46:06

                            MILLES MERCI 'TAGUAN' !!!!!

                            C'était bien la variable '$user' qui ne renvoyait rien !

                            J'ai donc corrigé cela en insérant une requete SQL (en haut de mon code d'origine) pour aller chercher la valeur du champ 'id_utilisateur' de ma table 'UTILISATEURS' afin de la récupérer dans ma variable '$user'.
                            Et le tour est joué ! Plus d'erreurs.

                            Merci encore pour ton aide précieuse ;)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 février 2011 à 12:46:06

                              Le message qui suit est une réponse automatique activée par un modérateur.
                              Les réponses automatiques permettent d'éviter aux modérateurs d'avoir à répéter de nombreuses fois la même chose, et donc de leur faire gagner beaucoup de temps.
                              Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter le modérateur en question par MP.


                              Merci d'utiliser les balises de code


                              Bonjour,

                              Les forums du Site du Zér0 disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source.
                              Vous avez posté un code source sans utiliser cette fonctionnalité. Pourriez-vous éditer votre message en entourant votre code des balises <code > et </code > ?

                              Cela aura pour effet de "colorer" votre code et donc d'en faciliter grandement la lecture. Vous aurez ainsi beaucoup plus de chances d'avoir des réponses.

                              Voici un exemple de code non coloré avec la balise "citation" (mauvais exemple) :

                              Citation

                              int main(int argc, char *argv[])
                              {
                              long choixOperation;

                              printf("Choisissez l'operation a effectuer");
                              /* etc. */
                              }



                              Voici maintenant le même code coloré, si vous aviez utilisé la balise "code" (bon exemple) :

                              int main(int argc, char *argv[])
                              {
                                  long choixOperation;
                              
                                  printf("Choisissez l'operation a effectuer");
                                  /* etc. */
                              }
                              


                              C'est plus clair n'est-ce pas ? :)
                              N'hésitez pas à éditer votre message pour changer la balise afin de colorer votre code.

                              Plus d'informations à ce sujet


                              Merci de votre compréhension :)
                              Les modérateurs.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Erreur syntaxe SQL près de UNION SELECT

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown