Problème requête sql

Emilie -  
 Emilie -
Bonjour,

J ai une une BDD avec des activités qui se déroulent tout au long de la journée à des heures différentes:

8h:lever
9h:déjeuner
10h:travail
13h:manger
14h:foot
17h:gouter
20h:manger
22h:dodo

Ces activités sont classées par heure du début de l'activité (champ « heure » dans ma table)

j'affiche ces données dans un tableau à l'aide de la boucle while.

J'ai fait une requête sql pour afficher les 3 prochaines activités (en tenant compte de l'heure actuelle)

SELECT * FROM table WHERE heure>$heure LIMIT 0,3

la variable $heure est l'heure actuelle.

Sachant que les activités sont les mêmes tous les jours. Mon problème est que quand on est en soirée (exemple: $heure=23h05) j'aimerai afficher les 3 prochaines activités du lendemain matin

Mais en mettant comme clause WHERE heure>$heure et bien ça n'affiche pas évidemment l'activité du lendemain matin. Car si l'activité commence à 8h et qu'il est actuellement 23h05 alors la clause n'est pas valide pour afficher ces données (en effet heure=8h n'est pas supérieur à $heure=23h05)

Aidez moi svp. Merci

6 réponses

Emilie
 
Je voudrai trouver une requête sql qui m'affiche les 3 prochaines activités et qui fonctionne à nimporte quelle heure de la journée (meme le soir)

Merci de votre aide
0
Emilie
 
up
0
le père
 
Bonjour

L'idée est d'ajouter 24 heures soit 86400 secondes aux heures qui précèdent l'heure courante, pour qu'elles deviennent des heures 'de demain'

SELECT * FROM table ORDER BY IF (heure<CURTIME(),TIME_TO_SEC(heure)+86400,TIME_TO_SEC(heure)) LIMIT 3

LIMIT 3 c'est la même chose que LIMIT 0,3, pas besoin de s'encombrer du 0,
0
Emilie
 
Ok merci

quand je teste ta requete, ça me met :

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\tests\Developpez.com\MYWEBSITE.php on line 114

et la ligne 114 sur mon script, c'est la ligne ou il y a :

<?php while ($donnees= mysql_fetch_array($resultat)) { ?>

Apparament je dois rajouter un parametre mais je ne sais pas du tout koi faire...

Merci de ton aide
0

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

Posez votre question
le père
 
Non, tu n'as pas de paramètre à ajouter.
PHP râle parce que le paramètre passé n'est pas du bon type : il attend un type ressource et tu passes un type booléen.
Normalement, mysql_query rend une ressource, mais s'il y a un problème, il rend FALSE - donc un booléen : c'est ce qui t'arrive.
Le problème c'est que la requête est mauvaise.
En effet, quand on donne à une table ou à un champ un nom qui correspond à un mot réservé mysql, il faut l'entourer d'accents graves ``
Comme tu as appelé ta table ... table, et que c'est un mot réservé, tu as le choix entre changer le nom de la table (ce que je te conseille) ou entourer son nom de `` :
SELECT * FROM `table` ORDER BY IF (heure<CURTIME(),TIME_TO_SEC(heure)+86400,TIME_TO_SEC(heure)) LIMIT 3
0
Emilie
 
En effet tu as raison tout fonctionne ! j avai fait une faute de frappe...

Un grand merci ! Vraiment génial !!
0