Problème avec ORDER BY

Résolu
nano49070 Messages postés 6 Statut Membre -  
nano49070 Messages postés 6 Statut Membre -
Bonjour,
Je n'y connais vraiment pas grand chose en PHP MYSQL alors merci de m'aider.

J'ai une requête MYSQL qui fonctionne mais qui me donne des résultats dans le désordre (ou plus exactement dans un ordre que je ne maitrise pas)

J'aimerais avoir les résultats de ma requête dans l'ordre (si possible décroissant) des a.annonce_id

A chaque fois que je tente de mettre un ORDER BY j'ai des messages d'erreur

voila ma requête:

$user_id = $userdata['user_id'];

$sql = mysql_query("
  SELECT a.annonce_id, c.cat_name, a.count_photos, a.annonce_title, a.annonce_date, a.main_photo_id, p.photo_id, p.photo_name, p.annonce_id
  FROM " . ANNONCES_TABLE . " a
  LEFT OUTER JOIN " . table_photos . " p
  ON a.main_photo_id = p.photo_id
  LEFT OUTER JOIN " . CATEGORIES_TABLE . " c
  ON a.cat_id = c.cat_id
  where a.poster_id = '$user_id'
  LIMIT $start,$app") ;


Par avance grand merci à ceux qui pourrons m'aider, je ne sais pas si c'est important mais
mon site est déjà un peu ancien et est en PHP3

EDIT: Ajout de la coloration syntaxique.

7 réponses

  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    "j'ai des messages d'erreur "
    Lesquels ?
    0
  2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour.
    Sachant qu'il faut placer l'order by avant le LIMIT.

    mais comme le dit NHENRY... quels messages d'erreur ?
    Avec quel code ?
    0
  3. nano49070 Messages postés 6 Statut Membre
     
    Bonjour NHenry et Jordane45 et merci de vous intéresser à mon cas.

    J'avais du effectivement mettre le order by au mauvais endroit car maintenant plus de problème j'ai bien mes annonces classées par ordre décroissant d'id :-)

    Par contre, j'ai un nouveau soucis qui m'avait échappé avec cette requête, car j'ai deux types d'annonces (avec et sans photos)

    Ma requête affiche bien les deux types d'annonces mais lorsque je récupère les résultats pour afficher dans un tableau :

    la photo, l'id de l'annonce, le titre, la catégorie, la date de publication, la date d'expiration

    tout marche impeccablement bien pour les annonces avec photo mais our les annonces sans photo j'ai le résultat suivant :

    La colonne photo affiche une image par défaut "pas de photo" (c'est ce que je souhaite donc pas de soucis)
    la colonne id reste vide (elle devrait contenir l'id de l'annonce )
    toutes les autres colonnes sont remplies correctement!

    Je pense que c'est un problème de jointure des différentes table mais je suis largué ;-(

    encore merci de me consacrer un peu de votre temps.
    0
  4. nano49070 Messages postés 6 Statut Membre
     
    Je pense que ma requête fonctionne mais qu'elle génère d'autres problèmes par ailleurs.

    l'ensemble du code de la requête et de l'affichage des résultats est :

    $user_id = $userdata['user_id'];

    $sql = mysql_query("
    SELECT a.annonce_id, c.cat_name, a.count_photos, a.annonce_title, a.annonce_date, a.main_photo_id, p.photo_id, p.photo_name, p.annonce_id
    FROM " . ANNONCES_TABLE . " a
    LEFT OUTER JOIN " . table_photos . " p
    ON a.main_photo_id = p.photo_id
    LEFT OUTER JOIN " . CATEGORIES_TABLE . " c
    ON a.cat_id = c.cat_id
    where a.poster_id = '$user_id'
    ORDER BY a.annonce_id DESC
    LIMIT $start,$app") ;


    while ( $row = mysql_fetch_array($sql))
    {
    $photo_path = !empty($row['photo_name']) ? 'upload/thumbs/' . $row['photo_name'] : $script_path . $template_path . '/images/nophoto.gif';
    $expiration_date = $row['annonce_date']+$script_config['announcement_duration']*3600*24;
    $template->assign_block_vars('annonces', array(
    'ANNONCE_ID' => $row['annonce_id'],
    'EXPIRE_DATE' => create_date($expiration_date,'','','d/m/Y'),
    'ANNONCE_DATE' => create_date($row['annonce_date'],'','','d/m/Y'),
    'CATEGORIE' => $row['cat_name'],
    'IMAGE' => '<img src="' . $photo_path . '">',
    'TITLE' => $row['annonce_title'])
    );
    }


    J'ai probablement un gros soucis avec ce qui est après le while quand il n'y à pas de photo et mon $row semble prendre des valeurs étrange (j'ai un décompte des annonces qui affiche le nombre d'annonces et alors que j'ai 5 annonces il me met "vous avez 2 photos"
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. nano49070 Messages postés 6 Statut Membre
     
    J'ai installé Heidi sql pour tester ma requête, mais je ne suis pas certain d'avoir compris comment cela m'aidera
    il me trouve des erreurs sql 1064 mais je ne sais pas ce que c'est......

    J'ai supprimé tout ce qui concernait les images dans ma précédente requête

    Ce code semble fonctionner en tous points:

    $user_id = $userdata['user_id'];
    $sql = mysql_query("
    SELECT a.annonce_id, c.cat_name, a.count_photos, a.annonce_title, a.annonce_date, a.main_photo_id
    FROM " . ANNONCES_TABLE . " a
    LEFT OUTER JOIN " . CATEGORIES_TABLE . " c
    ON a.cat_id = c.cat_id
    where a.poster_id = '$user_id'
    ORDER BY a.annonce_id DESC
    LIMIT $start,$app") ;

    while ( $row = mysql_fetch_array($sql) )
    {
    $expiration_date = $row['annonce_date']+$script_config['announcement_duration']*3600*24;
    $template->assign_block_vars('annonces', array(
    'ANNONCE_ID' => $row['annonce_id'],
    'EXPIRE_DATE' => create_date($expiration_date,'','','d/m/Y'),
    'ANNONCE_DATE' => create_date($row['annonce_date'],'','','d/m/Y'),
    'CATEGORIE' => $row['cat_name'],
    'IMAGE' => ($row['count_photos']) ? '<img src="' . $template_path . '/images/pic.png" alt="' . $row['count_photos'] . ' photo(s)">' : '',
    'TITLE' => $row['annonce_title'])
    );

    Le seul hic c'est que j'aimerais quand même bien arriver à afficher la photo de chaque annonce qui en contient plutôt qu'une image qui symbolise qu'il y a des photos.
    0
  7. nano49070 Messages postés 6 Statut Membre
     
    Bonsoir,

    J'ai finalement réussi à résoudre mon problème, merci à tous ceux qui ont tenté de m'aider.
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Si la question est résolue..
      Merci de ne pas oublier de clôturer le sujet
      (en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

      TU peux aussi indiquer la solution que tu as trouvé...ça pourra éventuellement aider d'autres internautes qui auraient le même souci....

      Cordialement,
      Jordane
      0
  8. nano49070 Messages postés 6 Statut Membre
     
    Voila le code qui fonctionne, j'ai changé la place du Order by et la ligne 'IMAGE'

    $sql = mysql_query("
    SELECT a.annonce_id, c.cat_name, a.count_photos, a.annonce_title, a.annonce_date, a.main_photo_id, p2.photo_id, p2.photo_name
    FROM " . ANNONCES_TABLE . " a
    LEFT OUTER JOIN " . CATEGORIES_TABLE . " c
    ON a.cat_id = c.cat_id
    LEFT OUTER JOIN " . PHOTOS_TABLE . " p2
    ON a.main_photo_id = p2.photo_id
    where a.poster_id = '$user_id'
    ORDER BY a.annonce_id DESC
    LIMIT $start,$app") ;

    while ( $row = mysql_fetch_array($sql) )
    {
    $photo_path = !empty($row['photo_name']) ? 'upload/thumbs/' . $row['photo_name'] : $script_path . $template_path . '/images/nophoto.gif';
    $expiration_date = $row['annonce_date']+$script_config['announcement_duration']*3600*24;
    $template->assign_block_vars('annonces', array(
    'ANNONCE_ID' => $row['annonce_id'],
    'EXPIRE_DATE' => create_date($expiration_date,'','','d/m/Y'),
    'ANNONCE_DATE' => create_date($row['annonce_date'],'','','d/m/Y'),
    'CATEGORIE' => $row['cat_name'],
    'IMAGE' => ($row['count_photos']) ? '<img src="' . $photo_path . '" alt="' . $row['count_photos'] . ' photo(s)">' : '',
    'TITLE' => $row['annonce_title'])
    );
    0