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: p> Il laisse des articles avec un null date_end code>. 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 code> s'il est laissé vide? :) p> p>
5 Réponses :
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 p> b] date_end doit être Date présente et plus que la date actuelle p>
"Est null" pas "est nul" dans mysql
Vous pouvez essayer: ou un groupe logique similaire. p> p>
Merci les gars pour les réponses incroyablement rapides! Celui-ci fait absolument ce que je cherchais. C'était enfin assez facile :)
ou essayer 0 semble fonctionner juste pour moi p> p>
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()
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é.
Encore une autre possibilité utilise de la coalesce, il renvoie la première valeur non nulle d'une liste: donc si date_end code> est null la date future "9999 -1-1 'sera utilisé à l'intérieur de la comparaison.
Mais cela se brisera après cette date: -) p> p>