Requete avec interval de date

Mammouth du PHP | 545 Messages

14 mai 2008, 17:54

Désolé Cyrano mais ta proposition:
. "\n AND WEEK(part.naissance) = WEEK(NOW())"
me semble la bonne ! Le problème est que j'avais déjà un 'WHERE' et que je ne l'avais pas vu ... 'AND' c'est mieux !

J'essaye de faire un tableau convenable merci !

EDIT: Non c'est pas encore cela car les dates entre le 06 et le 19 sont reprises !
Sebe

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

Invité
Invité n'ayant pas de compte PHPfrance

15 mai 2008, 09:09

Salut,

Comme on le dit, la nuit porte ... quoi encore :roll:
Disons que j'arrive à récupérer un bon intervalle de date:
$years = (date('Y')) - $nbre_annee;
$Njour = date('w');

switch ($Njour){
	case '1':
		$jour_min = date("m-j",mktime(0,0,0,date("m"),date("j")));
		$jour_max = date("m-j",mktime(0,0,0,date("m"),date("j")+6));
	break;
	case '2':
		$jour_min = date("m-j",mktime(0,0,0,date("m"),date("j")-1));
		$jour_max = date("m-j",mktime(0,0,0,date("m"),date("j")+5));
	break;
	case '3':
		$jour_min = date("m-j",mktime(0,0,0,date("m"),date("j")-2));
		$jour_max = date("m-j",mktime(0,0,0,date("m"),date("j")+4));
	break;
	case '4':
		$jour_min = date("m-j",mktime(0,0,0,date("m"),date("j")-3));
		$jour_max = date("m-j",mktime(0,0,0,date("m"),date("j")+3));
	break;
	case '5':
		$jour_min = date("m-j",mktime(0,0,0,date("m"),date("j")-4));
		$jour_max = date("m-j",mktime(0,0,0,date("m"),date("j")+2));
	break;
	case '6':
		$jour_min = date("m-j",mktime(0,0,0,date("m"),date("j")-5));
		$jour_max = date("m-j",mktime(0,0,0,date("m"),date("j")+1));
	break;
	case '7':
		$jour_min = date("m-j",mktime(0,0,0,date("m"),date("j")-6));
		$jour_max = date("m-j",mktime(0,0,0,date("m"),date("j")));
	break;
	}

/////////// Liste des coureurs né le  ///////////
$query = "SELECT DISTINCT(nom), part.prenom, part.id, part.naissance"
	. "\n FROM #__classement_participant part, #__classement_chang chang "
	. "\n WHERE chang.participant_id = part.id"
	. "\n AND DATE_FORMAT(part.naissance,'%m-j') >= '". $jour_min . "'"
	. "\n AND DATE_FORMAT(part.naissance,'%m-j') <= '". $jour_max . "'"
	. "\n AND part.published = '1'"
	//. "\n AND chang.annee >= '" . $years . "'"
	. "\n GROUP BY nom"
	//. "\n ORDER BY DATE_FORMAT(part.naissance,'%j') ASC"
	;

$database->setQuery( $query );
$partList = $database->loadObjectList();
mais j'ai un problème avec DATE_FORMAT() car mon tableau est vide ... enfin je pense que l'expression '%m-j' ne doit pas être correcte !

Avez-vous une idée ?

Merci

Eléphant du PHP | 175 Messages

15 mai 2008, 10:11

je ne vois pas comment tu as pu obtenir une periode de 13 jours avec la fonction week :?


je testerais un truc du genre
$query = "SELECT (DAYOFYEAR(part.naissance)-DAYOFYEAR(NOW()) ) AS diff_jour , part.nom, part.prenom, part.id, part.naissance
FROM #__classement_participant part, #__classement_chang chang
WHERE chang.participant_id = part.id
AND ( 
         (diff_jour <=7 AND diff_jour >=0) 
         OR
         ROUND(diff_jour) >= 358
)
AND part.published = '1'
ORDER BY MONTH(part.naissance),DAY(part.naissance)";
PS: le >=358 c'est pour les derniers jour de decembre, afin de recuperer les jours de janvier...
pur les tests il est conseille d'enlever cette ligne, car je n'ai pas pu tester ma requete... :oops:

PS2: j'ai virer le group by nom et le distinct (nom), sinon on vire les homonymes...
si ta base est bien faite on a un id par utilisateur, sinon il faut trouver une autre cle unique ;)