Problème avec ORDER BY

Résolu
nano49070 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
nano49070 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -
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

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
"j'ai des messages d'erreur "
Lesquels ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
nano49070 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
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
nano49070 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
As tu testé ta requête en direct dans ta bdd ?
Regardes ceci : https://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nano49070 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
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
nano49070 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir,

J'ai finalement réussi à résoudre mon problème, merci à tous ceux qui ont tenté de m'aider.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
nano49070 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
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