2009-05-06 13 views
1

J'ai une base de données MySQL et à l'intérieur une table appelée ProductMaster avec 6 champs "Product_Id, Product_Name, Model, Opening_date, Closing_Date, Status". Date_d'ouverture et date de clôture Peut accepter des valeurs nulles. Certains enregistrements ont des valeurs pour ce champMysql Query: Where clause si Existe

J'ai la requête ci-dessous pour afficher les enregistrements de ce tableau.

"select Product_Id,Product_Name,Model from ProductMaster where Status=1" 

Maintenant, je veux changer la requête d'avoir un filtre sur le Opening_Date et Closing_Date si elles ne sont pas nulles

Ex: Si un enregistrement est d'avoir Opening_Date comme 05/01/2009 et la date de clôture comme 05/30/2009 Ensuite, je veux vérifier si aujourd'hui est une date entre ces deux dates, et si oui, renvoie les enregistrements

Si les deux valeurs de champ sont vides, disques retour

peut-o ne m'aidez pas à encadrer la requête? Merci d'avance

+0

Pouvez-vous préciser si les enregistrements avec opening_date et closing_date mis à null doivent être retournés? – mattkemp

Répondre

3

La partie WHERE d'une requête (la "clause WHERE") est simplement une longue expression booléenne. Qu'est-ce que ça veut dire? Que MySQL veut juste qu'il retourne vrai ou faux, ce qu'il comprend comme "Oui. Inclure cette ligne dans les résultats." ou "Non. N'incluez pas cette ligne dans les résultats."

Si je comprends bien, vous voulez faire deux choses:

  1. Vérifiez si le opening_date et closing_date sont null
  2. Vérifiez si aujourd'hui entre ces deux dates.

Et vous voulez que # 2 n'arrive que si # 1 est vrai. Qui pourrait être exprimé comme:

#1 AND #2 

Ce qui serait évalué comme faux si soit # 1 ou # 2 est faux.

qui peut être traduit par:

  1. (opening_date IS NOT NULL) AND (closing_date IS NOT NULL)
  2. NOW() >= opening_date AND NOW <= closing_date

Donc, si nous traitons ces deux comme le # 1 et # 2 dans l'expression que nous avons dit que nous allions utiliser (#1 AND #2) alors nous obtenons:

((opening_date IS NOT NULL) AND (closing_date IS NOT NULL)) 
AND (NOW() >= opening_date AND NOW <= closing_date`) 

Et c'est la clause WHERE dont vous avez besoin.