2016-10-26 6 views
2

私は助けが必要です。私はPHPとMySQLを使用していくつかの条件ごとにテーブルから値を取得できません。私は下の表を説明しています。日付を比較するMySQLは結果を返しません

db_subcat:ここ

id subcat_id sub_name  from_date  to_date 
------------------------------------------------------------ 
1  60   Ram   2016-10-25  2016-10-28 
2  60   Ram          
3  61   Raj         

いくつかの行にはfrom_date and to_date value.Iは、以下の私のクエリを説明しないのですがあります。

$date="2016-10-23"; 
$sql="select * from db_subcat 
    where from_date <='".$date."' and to_date >= '".$date."' and from_date !='' and to_date !='' 
    group by subcat_id 
    union all select * from db_basic 
    where from_date ='' and to_date ='' 
    group by sucat_id"; 

ここでは私の問題は、テーブルには、私は、次のすべての条件を使用して値を取得する必要が(from_date ='' and to_date ='')または(from_date !='' and to_date !='') .Hereのためのエントリがないながら、私は値を取得することはできませんです。

1- from_date and to_dateに値があり、値が存在する場合は一致します。

2- from_date and to_dateに値または空白が両方の条件値にある場合、フェッチする必要があります。

3-テーブルに(from_date ='' and to_date ='')または(from_date !='' and to_date !='')のエントリがない場合。

この問題を解決するのを手伝ってください。

+0

あなたは 'db_basic'テーブルの構造とデータを教えてください。 –

+0

@ d.coder:私は私のポストの表を挙げました。実際には、 'sub_id'ですべての' sub_name'グループが必要です。一致する日付は両方の日付フィールドに値があります。このクエリはうまくいきましたが、このテーブルが 'from_date = ''とto_date = '''または 'from_date!= ''とto_date!= ''' – subhra

答えて

1

私が正しくあなたを理解している場合、あなたはおそらくISNULLを使用する必要がある、あなたは2つのクエリを組み合わせることができます:このGROUP BY句は、MySQLを除くすべてのDBMSで無効であることを

select * from db_subcat 
where ((from_date IS NULL OR from_date ='') AND (to_date IS NULL OR to_date ='')) 
    OR (from_date <='".$date."' and to_date >= '".$date."') 
group by subcat_id 

注意を。 SELECT *ステートメントを使用してはいけません。常に列を指定し、各列はGROUP BY節にあるか、または集約関数で囲んでください。

+0

私はそれを試してみましょう。 – subhra

+0

私はテストしましたが、テーブルに '(from_date = ''とto_date = '')と(from_date!= ''とto_date!= ''')に関する行がある場合、それは動作しません。日付値と一致するものだけを取得します。それは私がなぜユニオンを使用していたのか両方を取得する必要があります。 – subhra

+0

私はすでに上記のすべての条件を与えています。 – subhra