Liste sauf ... ?

Mammouth du PHP | 545 Messages

01 févr. 2008, 11:28

Bonjour,

J'aurai une question pour vous ... !

J'aimerai lister une série d'événement passés et je voudrais savoir où il est le mieux de faire le tri et ne pas afficher les événements à venir :
- soit dans ma requête

Code : Tout sélectionner

$query = "SELECT course.id as course_id, course.course, course.date as days, course.pat_chal, course.kilometrage, course.nbre_part, course.epreuve_id, course.published, " . "\n epreuve.id, epreuve.epreuve" . "\n FROM #__classement_course AS course" . "\n INNER JOIN #__classement_epreuve AS epreuve ON epreuve.id = course.epreuve_id" . "\n WHERE epreuve_id ='" . $id. "'"// AND course.published = '1'" . "\n ORDER BY days DESC"; $database->setQuery( $query ); $courselist = $database->loadObjectList();
- soit dans mon code

Code : Tout sélectionner

<?php foreach ($courselist as $course){?> <tr> <td> <div align="center"> <?php if ($mosConfig_lang == 'french') { setlocale(LC_TIME, "fr"); $jour = strftime("%d %B %Y",strtotime($course->days)); }else{ $jour = strftime("%Y-%m-%d",strtotime($course->days)); } echo $jour; ?> </div> </td> <td> <div align="center"> <input name="course_id" id="course_id" type="hidden" value="<?php echo $course->course_id;?>" /> <?php $id = $course->course_id; if (($class_Config['link_edition'] == '1') || ($class_Config['link_edition'] == '2' && $course->published == '1')) { echo '<a href="' . $link . $id . '" title ="' . $course->epreuve .'">' . $course->course . '</a>'; } else { echo $course->course; } ?> </div> </td> <td><div align="center"><?php echo $course->pat_chal; ?></div></td> <td><div align="center"><?php echo $course->kilometrage; ?></div></td> <td><div align="center"><?php echo $course->nbre_part; ?></div></td> </tr> <?php } // Fin du foreach (); ?>
Merci pour l'éventuelle info
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

01 févr. 2008, 11:40

Je te conseillerais la requête car tu éviteras de transporter des données inutiles et que le PHP sera surement plus lent que le SQL à trier tes résultats. ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 545 Messages

01 févr. 2008, 12:01

La réponse avec le pourquoi ... un grand merci

EDIT:

Me suis planté quelque part:
$today = date('Y m d');
$query = "SELECT course.id as course_id, course.course, course.date as days, course.pat_chal,  course.kilometrage, course.nbre_part, course.epreuve_id, course.published, " 
	. "\n epreuve.id, epreuve.epreuve"
	. "\n FROM #__classement_course AS course"
	. "\n INNER JOIN #__classement_epreuve AS epreuve ON epreuve.id = course.epreuve_id"
	. "\n WHERE epreuve_id ='" . $id. "' AND DATE_FORMAT(course.date,'%Y', '%m', '%d') < '" . $today . "'"
	
	. "\n ORDER BY days DESC";
Voici le jolie message d'erreur:
DB function failed with error number 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 ' '%m', '%d') < '2008 02 01' ORDER BY days DESC' at line 5 SQL=SELECT course.id as course_id, course.course, course.date as days, course.pat_chal, course.kilometrage, course.nbre_part, course.epreuve_id, course.published, epreuve.id, epreuve.epreuve FROM jos_classement_course AS course INNER JOIN jos_classement_epreuve AS epreuve ON epreuve.id = course.epreuve_id WHERE epreuve_id ='2' AND DATE_FORMAT(course.date,'%Y', '%m', '%d') < '2008 02 01' ORDER BY days DESC
Bon j'ai bien compris que c'était dans la saisie de ma date mais ... ????
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 févr. 2008, 13:06

De mémoire, date_format ne prend que deux arguments, la valeur et le format... et toi tu lui en passe 4 ;)

Code : Tout sélectionner

DATE_FORMAT(course.date, '%Y %m %d')
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 545 Messages

01 févr. 2008, 14:00

Salut,
De mémoire, date_format ne prend que deux arguments, la valeur et le format... et toi tu lui en passe 4 ;)
Non non ... j'ai trouvé ce lien ici

Après avoir essayé 'DATEDIFF' sans résultat, j'ai trouvé la bonne façon de faire
$today = date('Y-m-d');
$query = "SELECT course.id as course_id, course.course, course.date as days, course.pat_chal,  course.kilometrage, course.nbre_part, course.epreuve_id, course.published, " 
	. "\n epreuve.id, epreuve.epreuve"
	. "\n FROM #__classement_course AS course"
	. "\n INNER JOIN #__classement_epreuve AS epreuve ON epreuve.id = course.epreuve_id"
	. "\n WHERE epreuve_id ='" . $id. "' AND DATE_FORMAT(course.date,'%Y-%m-%d') < '" . $today . "'" //AND DATEDIFF('" . $today . "', 'course.date' ) > '0'	"
	. "\n ORDER BY days DESC";
Merci à tous
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!