Page 1 sur 1

problème de requete

Posté : 14 août 2007, 23:05
par Snipy
Bonsoir tout le monde,

Je vois pour la première fois SELECT DISTINCT mais cela ne marche pas
L'erreur retournée est
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 '1' at line 1
    $requete="SELECT DISTINCT * FROM phpl_clmnt_cache WHERE ID_CHAMP='$champ' ORDER BY POINTS DESC, DIFF DESC, BUTSPOUR DESC , BUTSCONTRE ASC, NOM";
Merci d'avance de m'éclaircir.

Et si quelqu'un au passage peut me faire un bref rappel de l'utilisation de Distinct :)

Bonne soirée

Posté : 14 août 2007, 23:47
par Ryle
Affiche la requête générée.. regarde s'il n'y a rien d'anormal... joue la dans mysql ou phpMyAdmin... est ce que ta table existe ? est-ce que tes champs existent ? que donne la requête sans le distinct ? et avec les noms des champs que tu veux récupérer à la place de l'étoile ?

Si id_champ est un nombre (int, tinyint, ..) alors il ne faut pas d'apostrophes autour de ses valeurs.. les apostrophes doivent uniquement délimiter des chaines...

bref rappel de l'utilisation du distinct : http://dev.mysql.com/doc/refman/5.0/fr/select.html
Après le mot SELECT, vous pouvez ajouter certaines options qui affectent le comportement de la commande.

Les options DISTINCT, DISTINCTROW et ALL indiquent quels enregistrements avec doublons doivent être retournés. Par défaut, c'est (ALL), retournant ainsi tous les enregistrements. DISTINCT et DISTINCTROW sont synonymes et indique que les doublons doivent être éliminés du résultat.

Posté : 15 août 2007, 00:55
par Snipy
J'ai essayé sans les guillemets (car $champ est effectivement un nombre.
J'ai aussi essayé avec
$requete='SELECT DISTINCT * FROM phpl_clmnt_cache WHERE ID_CHAMP='.$champ.' ORDER BY POINTS DESC, DIFF DESC, BUTSPOUR DESC , BUTSCONTRE ASC, NOM';
L'erreur de Mysql
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 DISTINCT * FROM phpl_clmnt_cache WHERE ID_CHAMP='.$champ.' ORDER BY POIN' at line 1

Posté : 15 août 2007, 01:02
par Sékiltoyai
Tu es sur que tu ne t'es pas trompé d'erreur avec la dernière requète ?
Normalement, celle que tu viens de nous poster ne devrait pas renvoyer cette erreur, à moins que tu aies fait
$champ = '\'$champ\'';

Posté : 15 août 2007, 20:16
par Snipy
j'ai $champ = $_SESSION['champ'];

et un echo de champ me renvois bien mon nombre (1)

Posté : 15 août 2007, 21:45
par Sékiltoyai
Alors l'erreur ne correspond pas au code que tu nous donnes. Si tu veux qu'on t'aide, il faut que tu nous donnes les bonnes erreurs. Au passage, le code que tu nous as donné est exact (enfin à part le ',NOM' à la fin de la requète. EDIT: Ah non, même pas, la requète est bel et bien correcte).

Posté : 15 août 2007, 22:15
par Snipy
Pourtant dans mon code il y a 3 requetes, et c'est en enlevant celle la que l'erreur disparait.

Posté : 15 août 2007, 22:49
par Sékiltoyai
Alors donne le code réel… :-/

Posté : 16 août 2007, 13:29
par Snipy
Voici
<?php if (!isset($_GET['champ']))
   {
    $champ = $_SESSION['champ'];
   }

else
{
$champ=$_GET['champ'];
}



$query = "SELECT phpl_divisions.nom, phpl_saisons.annee, (phpl_saisons.annee)+1 
          FROM phpl_championnats, phpl_divisions, phpl_saisons 
          WHERE phpl_championnats.id='$champ' 
          AND phpl_divisions.id=phpl_championnats.id_division
          AND phpl_saisons.id=phpl_championnats.id_saison";

$result = mysql_query($query) or die (mysql_error());

        while ($row=mysql_fetch_array($result))
        {
            echo "<div align=\"center\"><h4><b>".$row[0]."  ".$row[1]."/".$row[2]."</b></h4></div>\n";
        }

$class=0;
$lien="oui";


    // RAPPEL DES PARAMETRES du CHAMPIONNAT
    $result=mysql_query("SELECT accession, barrage, estimation, relegation, id_equipe_fetiche, fiches_clubs
                         FROM phpl_parametres
                         WHERE id_champ='$champ'");
    $row=mysql_fetch_array($result);

    $accession = $row['accession'];
    $barrage = $row['barrage'] + $accession;
    $estimation = $row['estimation'];
    $fiches_clubs = $row['fiches_clubs'];
    $id_equipe_fetiche=$row['id_equipe_fetiche'];
    
    $relegation = $nb_equipe - $row['relegation'];
      

echo $champ;
    $requete='SELECT DISTINCT * FROM phpl_clmnt_cache WHERE ID_CHAMP='.$champ.' ORDER BY POINTS DESC, DIFF DESC, BUTSPOUR DESC , BUTSCONTRE ASC, NOM';
    clmnt($legende, $type, $accession, $barrage, $relegation, $champ, $requete, $lien, $id_equipe_fetiche);
  
    $query="SELECT max(phpl_journees.numero) FROM phpl_journees, phpl_matchs WHERE phpl_journees.id=phpl_matchs.id_journee and buts_dom is not NULL and phpl_journees.id_champ='$champ'";
    $result=mysql_query($query) or die (mysql_error());
    while ($row=mysql_fetch_array($result))
        {
        $numero=$row[0];
        }
    ?>
    <br /><br />
    <?
    if (!empty($numero)) {aff_journee($champ, $numero, CONSULT_CLMNT_MSG6, 0, $fiches_clubs, $id_equipe_fetiche);}

    if ($numero<$nb_journees)
     {
      aff_journee($champ, $numero+1, CONSULT_CLMNT_MSG62, 0, $fiches_clubs, $id_equipe_fetiche);
     }
mysql_close();

Posté : 16 août 2007, 13:37
par Sékiltoyai
C'est bien ce que je disais, tu n'exécutes pas la requète que tu m'as dis exécuter. En fait, elle n'est l'a que pour faire joli.
Toi tu préfère exécuter une requète qui buggue :
$query="SELECT max(phpl_journees.numero) FROM phpl_journees, phpl_matchs WHERE phpl_journees.id=phpl_matchs.id_journee and buts_dom is not NULL and phpl_journees.id_champ='$champ'";

Posté : 16 août 2007, 16:22
par Snipy
C'est bien ce que je disais, tu n'exécutes pas la requète que tu m'as dis exécuter. En fait, elle n'est l'a que pour faire joli.
Toi tu préfère exécuter une requète qui buggue :
$query="SELECT max(phpl_journees.numero) FROM phpl_journees, phpl_matchs WHERE phpl_journees.id=phpl_matchs.id_journee and buts_dom is not NULL and phpl_journees.id_champ='$champ'";
Ma premiere requete s'effectue bien :wink: mais dans la fonction clmnt
<?php
    $requete='SELECT DISTINCT * FROM phpl_clmnt_cache WHERE ID_CHAMP='.$champ.' ORDER BY POINTS DESC, DIFF DESC, BUTSPOUR DESC , BUTSCONTRE ASC, NOM';
    clmnt($legende, $type, $accession
Tu veux voir la fonction?

Sinon ma seconde requete n'est donc pas bonne ?

Merci de ton aide :)

Posté : 16 août 2007, 17:10
par Sékiltoyai
Ouais, donne la fonction.

Posté : 16 août 2007, 18:49
par Snipy
Pendant un moment je n'avais plus l'erreur et voila que je l'ai de nouveau :
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 'ORDER BY POINTS DESC, DIFF DESC, BUTSPOUR DESC , BUTSCONTRE, NOM
Revoici ma page
<?php if (!isset($_GET['champ']))
   {
    $champ = $_SESSION['champ'];
   }

else
{
$champ=$_GET['champ'];
}



$query = "SELECT phpl_divisions.nom, phpl_saisons.annee, (phpl_saisons.annee)+1 
          FROM phpl_championnats, phpl_divisions, phpl_saisons 
          WHERE phpl_championnats.id='$champ' 
          AND phpl_divisions.id=phpl_championnats.id_division
          AND phpl_saisons.id=phpl_championnats.id_saison";

$result = mysql_query($query) or die (mysql_error());

        while ($row=mysql_fetch_array($result))
        {
            echo "<div align=\"center\"><h4><b>".$row[0]."  ".$row[1]."/".$row[2]."</b></h4></div>\n";
        }

$class=0;
$lien="oui";


    // RAPPEL DES PARAMETRES du CHAMPIONNAT
    $result=mysql_query("SELECT accession, barrage, estimation, relegation, id_equipe_fetiche, fiches_clubs
                         FROM phpl_parametres
                         WHERE id_champ='$champ'");
    $row=mysql_fetch_array($result);

    $accession = $row['accession'];
    $barrage = $row['barrage'] + $accession;
    $estimation = $row['estimation'];
    $fiches_clubs = $row['fiches_clubs'];
    $id_equipe_fetiche=$row['id_equipe_fetiche'];
    
    $relegation = $nb_equipe - $row['relegation'];
      

echo $champ;
    $requete='SELECT DISTINCT * FROM phpl_clmnt_cache WHERE ID_CHAMP='.$champ.' ORDER BY POINTS DESC, DIFF DESC, BUTSPOUR DESC , BUTSCONTRE ASC, NOM';
    clmnt($accession, $barrage, $relegation, $champ, $requete, $lien, $id_equipe_fetiche);
  
    $query="SELECT max(phpl_journees.numero) FROM phpl_journees, phpl_matchs WHERE phpl_journees.id=phpl_matchs.id_journee and buts_dom is not NULL and phpl_journees.id_champ='$champ'";
    $result=mysql_query($query) or die (mysql_error());
    while ($row=mysql_fetch_array($result))
        {
        $numero=$row[0];
        }
    ?>
    <br /><br />
    <?
    if (!empty($numero)) {aff_journee($champ, $numero, CONSULT_CLMNT_MSG6, 0, $fiches_clubs, $id_equipe_fetiche);}

    if ($numero<$nb_journees)
     {
      aff_journee($champ, $numero+1, CONSULT_CLMNT_MSG62, 0, $fiches_clubs, $id_equipe_fetiche);
     }
mysql_close();
Ainsi que la fonction clmnt
<?php function clmnt($accession, $barrage, $relegation, $champ, $requete, $lien, $id_equipe_fetiche)
{
echo "<table class=\"tablephpl2\" align=\"center\" cellspacing=\"0\" width=\"60%\"><tr class=\"trphpl3\"><th colspan=\"11\">Classement général</th></tr>\n";
echo "<tr class=\"trphpl3\">
<th align=\"center\">Position</th>
<th align=\"left\">Equipes</th>
<th align=\"left\">Pts</th>\n";
echo "<th align=\"left\">J</th>
<th align=\"left\">V</th>
<th align=\"left\">D</th>
<th align=\"left\">PM</th>
<th align=\"left\">PE</th>
<th align=\"left\">Dif</th>
<th align=\"left\"></th></tr>\n";

$result = mysql_query($requete) or die (mysql_error());
$pl=1;

      while ($row=mysql_fetch_array($result))
       {

                        if ($row['NOM']==EXEMPT){continue;}
                        if ($pl<=$accession){echo '1<tr class="accession">';}
                        elseif ($pl<=$barrage){echo '2<tr class="barrage">';}
                        elseif ($pl>$relegation){echo '3<tr class="relegation">';}
                        elseif (($pl%2)==0){echo '4<tr class="ligne1">';}
                      	else{echo '5<tr class="ligne2">';}

        echo '<td align="center">'.$pl.'</td>';
        $pl++;
        $x=0;


              while($x<8)
               {
               echo "<td>";

                   if ($x==0)
                    {
                     if ($row['id_equipe']==$_SESSION['id_equipe']){echo "<b>";}

                     if ($lien=='non'){echo "$row[$x]";}
                     else {echo "<a href=\"detaileq.php?champ=$champ&id_equipe=".$row['id_equipe']."\">$row[$x]</a>";
                     if ($row['id_equipe']==$_SESSION['id_equipe']){echo "</b>";}
                     }
                     }

                     else print $row[$x];
                     echo "</td>";
                     $x++;
                     }
             echo "<td align=\"right\">";
             $leg="graphique";
             echo "<a href=\"#\" onclick=\"window.open('graph.php?equipe=".$row['ID_EQUIPE']."','Stats','toolbar=0,location=0,directories=0,status=0,scrollbars=0,resizable=0,copyhistory=0,menuBar=0,width=560,height=320');return false;\"><img src=\"../images/graph.gif\" border=\"0\" alt=\"$leg\"></a>";
             echo "</td></tr>\n";
        }
        echo "</table>";
}
Encore merci pour ton aide

Posté : 16 août 2007, 19:04
par Vikchill
Tu devrais faire un truc: tu reproduis le problème en affichant la requête qui pose problème (dans le 'or die()' par exemple) et tu nous la file après l'avoir testé directement dans phpMyAdmin.

Posté : 16 août 2007, 19:52
par Snipy
Après diverses modifications, tout remarche..


Merci de votre aide :D