Après le $req->execute(), ne devrais tu pas faire un fetch ou un fetchAll() ?
Bonjour,
Voila je rencontre un petit problème avec mon code.
Je galère depuis plusieurs jours .. J'ai sur ma base de donnée plusieurs lignes dans une table avec une colonne " date " sous cette forme http://prntscr.com/ccna4r
Sur mon site j'ai un 5 blocs et j'aimerai que dans les 5 blocs il y ait les derniers matchs trié selon les dernières dates !
Seul bémol.. Les blocs affichent effectivement les dernières dates mais à l'interieur il n y a qu'un seul match qui s'affiche.
http://prntscr.com/ccnaur
Avez vous une idée à mon problème?
Merci beaucoup !
18 réponses
Ca devrait ressembler à ça
Pareil, une prono par case ..
que vaut un var_dump de $rows avant le foreach ?
Un var_dump de $rows avant le foreach me donne les derniers matchs aussi déjà affiché
Donc cela viens de la requête qui est fausse.
Là, elle sélectionne seulement les 5 derniers éléments.
Il est possible, en une seule requête, de ramener les 5 premiers matchs de chaque date mais c'est très compliqué.
Je te conseille de faire une requête qui ramène uniquement les dates, tu les récupères dans un tableau (c'est en gros ce que tu as fait)
tu parcours le tableau avec un foreach et pour chaque itération(chaque date) tu vas chercher les 5 matchs correspondant à la date
Tu peux même ne préparer qu'une seule fois cette requête avant le foreach et il suffira de changer le paramètre 'date' à chaque itération.
Carouge10: Je veux quelle prenne les 5 derniers élèments des boxes par date !
Huggy: J'ai pas très bien compris .. Tu aurais un exemple?
Tu fais un "group by date", donc fatalement, elles sont groupés par date ...
Retire le "group by date", et récupère tous les matchs entre 2 dates (WHERE date BETWEEN etc....)
Et avec le PHP, tu créé le bloc uniquement lorsque la date change.
Tu penseras à faire un ORDER BY date DESC.
J'ai compris ce que vous vouliez, en revanche, je ne sais pas le faire avec une seule requête directement.
Huggy propose de récupérer toutes les données qui correspondent au bloc (sans limites de nombre) et de faire un "for" pour chaque date.
Kenor: Oui, sauf que la date change chaque jour car chaque jour il y a des matchs !
Voici un exemple avec 2 requêtes
En essayant ça, la page ne répond plus .. Ca m'a l'air assez dûr à comprendre niveau programmation
il te suffit de faire un interval de X jours DATE_SUB / DATE_ADD. Pour afficher les X jours avant, et les X jours après.
Ou si tu veux afficher toutes les dates, ne pas mettre de condition. Ou encore, mettre juste une limite au nombre de match que tu veux afficher via un simple "limit X" sans aucun WHERE.
@Huggy : Tu lui demandes de faire une requete par date ... En terme de perf, c'est tout ce qu'il faut éviter.
@Kenor: Je ne comprends pas ton raisonnement :s
Je pourrai dans ces cas là alors faire deux requêtes séparé l'une pour les 5 blocs pour affichers les dernières dates ajouté par matchs, et une autre requête qui regroupe les matchs par date mais ensuite comment ranger les matchs dans les bonnes cases?
Tu peux comme l'a proposé @Kenor ne faire qu'une seule requête sans GROUP BY mais en triant par date,
ensuite tu fais une boucle et tu gères toi même les ruptures de dates
Il te faut un compteur et une variable pour vérifier si on passe à la date suivante ou si on n'a pas atteint 5 matchs