11
votes

Mysql: comparer une date nulle à Current_Date

J'ai une table mysql avec des articles de presse avec les champs "date_start" et "date_end" pour indiquer les nouvelles à afficher sur un site Web. Les articles sont publics si la date_start est avant aujourd'hui et la date_end n'est pas déjà passée (après aujourd'hui).

Le problème: J'aimerais laisser l'administrateur laisser datation_end null si l'article est de nature permanente et n'expire pas. Cela ne fonctionne bien sûr pas avec mon sélection: xxx

Il laisse des articles avec un null date_end . J'ai essayé de jouer un peu avec des déclarations, mais cela m'a dérouté. Existe-t-il un moyen simple de faire cela, ou devrais-je simplement définir Date_end to 3000-01-01 s'il est laissé vide? :)


0 commentaires

5 Réponses :


1
votes

du petit, j'ai eu votre question que vous voulez une de ces

a] date_end plus que la date actuelle ou si elle est null xxx

b] date_end doit être Date présente et plus que la date actuelle xxx


1 commentaires

"Est null" pas "est nul" dans mysql



27
votes

Vous pouvez essayer: xxx

ou un groupe logique similaire.


1 commentaires

Merci les gars pour les réponses incroyablement rapides! Celui-ci fait absolument ce que je cherchais. C'était enfin assez facile :)



0
votes

ou essayer xxx

0 semble fonctionner juste pour moi


0 commentaires

3
votes

Votre dernière proposition semble correcte. Vous pouvez utiliser la fonction ifnull. Il a deux arguments. Si le premier argument est non nul, il renvoie le premier argument. Le deuxième argument est ce qu'il faut revenir si le premier argument est null. Donc, dans votre déclaration, vous pouvez dire ceci:

SELECT * FROM pf_news WHERE date_start <= CURRENT_DATE() AND IFNULL(date_end, '3000-01-01') >= CURRENT_DATE()


2 commentaires

J'ai réalisé que celui-ci est un peu de hack car il montrerait au site admin le 3000-01-01 date dans le formulaire d'édition :)


Étant donné que la déclaration IFNULL n'est que dans la clause WHERE plutôt que la clause SELECT, le «3000-01-01» ne devraient pas être renvoyés comme un résultat de la requête. Au moins, cela a bien fonctionné pour moi dans le passé.



0
votes

Encore une autre possibilité utilise de la coalesce, il renvoie la première valeur non nulle d'une liste: xxx

donc si date_end est null la date future "9999 -1-1 'sera utilisé à l'intérieur de la comparaison. Mais cela se brisera après cette date: -)


0 commentaires