MYSQL PHP et Date

Résolu
Bonjour,
j'aimerais afficher les champs de ma table cafeteriaMenus si la date n'est pas encore passée.

SELECT * FROM cafeteriaMenus WHERE dateMenu>2011-11-02 ORDER BY dateMenu ASC LIMIT 0,5

mais cela ne m'affiche les 5 premiers menus qui sont passés depuis longtemps...

CREATE TABLE 'cafeteriaMenus' (
'id' int(10) unsigned NOT NULL auto_increment,
'pdf' varchar(255) NOT NULL default '',
'dateMenu' date NOT NULL default '0000-00-00',
PRIMARY KEY ('id')
) TYPE=MyISAM AUTO_INCREMENT=9 ;

--
-- Contenu de la table 'cafeteriaMenus'
--

INSERT INTO 'cafeteriaMenus' VALUES (1, 'test.pdf', '2011-10-24');
INSERT INTO 'cafeteriaMenus' VALUES (2, 'test2', '2011-10-31');
INSERT INTO 'cafeteriaMenus' VALUES (3, 'test3', '2011-11-07');
INSERT INTO 'cafeteriaMenus' VALUES (4, 'test4', '2011-11-14');
INSERT INTO 'cafeteriaMenus' VALUES (5, 'test5', '2011-11-21');
INSERT INTO 'cafeteriaMenus' VALUES (6, 'test6', '2011-11-28');
INSERT INTO 'cafeteriaMenus' VALUES (7, 'test7', '2011-12-05');
INSERT INTO 'cafeteriaMenus' VALUES (8, 'test8', '2011-12-12');

Merci pour votre aide...
je pense que ca vient du format de la date mais je vois pas comment faire d'autre!

6 réponses

  1. Salut !

    Si tu essayais :
    SELECT * FROM cafeteriaMenus WHERE dateMenu > NOW();
    


    Juste pour voir...
    1. bonsoir elti69,
      pour faire des comparaisons et calculs avec les dates c'est plus simple de resté en timestamp... tu repasses en format jj/mm/aaaa au dernier moment pour affichage coté client
      1. Coeus, ta methhode marche mais elle ne fait pas ce que je veux.

        Je voudrais faire

        SELECT * FROM cafeteriaMenus WHERE dateMenu > NOW() -7 jours;

        et je n'y arrive pas.

        Epitale
        je n'arrive pas a soustraire des jours d'un timestamp...
        1. Bonjour,

          Le premier exemple donné dans la doc de mysql devrait répondre à ton problème.
          http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-functions.html

          Voici un exemple d'utilisation des fonctions de date. La requête suivante sélectionne toutes les lignes dont la colonne date_col représente une date de moins de 30 jours :
          
          mysql> SELECT quelquechose FROM nom_de_table
                     WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
          

          Notez que cette requête va aussi sélectionner des lignes dont les dates sont dans le futur.


          Xavier
          1. Ouais, je pense qu'avec ce que tu veux faire, le mieux serait effectivement d'utiliser un timestamp.

            C'est un peu confus au début, mais ça s'apprend vite. Regarde ici. Change tes champs de date dans ta BDD pour des Integers assez longs pour contenir un timestamp, et sers-toi de PHP pour faire les calculs nécessaires...

            Un timestamp, c'est un nombre de secondes. Donc pour obtenir un jour, tu dois trouver le nombre de secondes dans 24 heures, soit :

            60 * 60 * 24 = 86400

            Et tu soustrais ça au timestamp, le nombre de fois que tu veux.
            1. Merci beaucoup,
              les 2 méthodes fonctionnent MERCI mille fois!!!
              1. Super !
                N'oublie pas de mettre ton sujet en résolu, s'il l'est ! ;-)
                Bonne journée !