8722 sujets

Développement web côté serveur, CMS

Bonjour je fait un site d'actualités, et j'aimerais afficher les 5 articles les plus récents et les guides qui ont moins de 5 jours. Ainsi pour les articles je fait :
function get5Articles(){
	require('config/connect.php');
	$req = $bdd->prepare('SELECT id, resume, date FROM articles ORDER BY id DESC LIMIT 5');
	$req->execute();
	$data = $req->fetchAll(PDO::FETCH_OBJ);
	return $data;
	$req->closeCursor();
}

mais pour mes guides je ne vois pas comment faire afin de sectionner que ce qui ont moins de 5 jours et je ne vois pas comment faire.
Merci d'avance à ceux qui m'aideront.
Je propose quelque chose comme

$minDate = new DateTime(NULL, new DateTimeZone('Europe/Paris'));
$minDate -> sub(new DateInterval('P5D')); //il y a 5 jours
$MinDate = $minDate -> format('Y-m-d'); //la date  de départ en format std SQL
$req = $bdd->prepare('SELECT id, resume, date FROM articles  WHERE DATE >= $MinData ORDER BY id DESC LIMIT 5');

Sauf erreur de ma part, ça doit te donner au plus 5 articles écrits dans les 5 jours précédents.
PapyJP a écrit :
Je propose quelque chose comme

$minDate = new DateTime(NULL, new DateTimeZone('Europe/Paris'));
$minDate -> sub(new DateInterval('P5D')); //il y a 5 jours
$MinDate = $minDate -> format('Y-m-d'); //la date  de départ en format std SQL
$req = $bdd->prepare('SELECT id, resume, date FROM articles  WHERE DATE >= $MinData ORDER BY id DESC LIMIT 5');

Sauf erreur de ma part, ça doit te donner au plus 5 articles écrits dans les 5 jours précédents.

Merc ide ton aide mais je n'arrive à faire marcher ta méthode, en revanche j'ai trouver quelque chose que je parvient à faire fonctionner mais qui à un bug : ça me prend bien les articles ayant au max 5 jours d'ancienneté mais si je met une date supérieur a celle du jour à mon article comme par exemple le 30 mars il me le prend quand même... voici le code :
function getGuides(){
	require('config/connect.php');
	$req = $bdd->prepare('SELECT id, resume, date FROM guides  WHERE date > DATE_SUB(now(),INTERVAL 5 DAY)');
	$req->execute();
	$data = $req->fetchAll(PDO::FETCH_OBJ);
	return $data;
	$req->closeCursor();
}

Merci pour ton aide Smiley cligne
Si je comprends bien comment fonctionne ton code, il doit suffire d'ajouter une limite supérieure, quelque chose comme

SELECT id, resume, date FROM guides  WHERE date > DATE_SUB(now(),INTERVAL 5 DAY) AND date <= NOW()

Et au passage merci pour m'avoir rappelé qu'on pouvait faire des opérations sur les dates en SQL, ce que je n'avais pas utilisé jusqu'à présent.
Modifié par PapyJP (10 Mar 2019 - 19:38)
PapyJP a écrit :
Si je comprends bien comment fonctionne ton code, il doit suffire d'ajouter une limite supérieure, quelque chose comme

SELECT id, resume, date FROM guides  WHERE date &gt; DATE_SUB(now(),INTERVAL 5 DAY) AND date &lt;= NOW()

Et au passage merci pour m'avoir rappelé qu'on pouvait faire des opérations sur les dates en SQL, ce que je n'avais pas utilisé jusqu'à présent.

Merci surtout à toi ça fait plaisir de voir des gens comme ça qui sont d'une grande aide quand on est bloqué Smiley cligne Je test le code demain et je te dit si tout est ok.
Modifié par Kyks (10 Mar 2019 - 19:48)
En fait il est sans doute préférable d'écrire

SELECT id, resume, date FROM guides  WHERE date BETWEEN DATE_SUB(NOW(),INTERVAL 5 DAY) AND NOW();
Meilleure solution
PapyJP a écrit :
En fait il est sans doute préférable d'écrire

SELECT id, resume, date FROM guides  WHERE date BETWEEN DATE_SUB(NOW(),INTERVAL 5 DAY) AND NOW();

C'est nickel ! Merci infiniment à toi, le script marche parfaitement et je n'ai plus le bug qui me prends plus les guides si leur dates est supérieure à celle du jour.
Encore merci pour ton grand aide Smiley smile