2016-11-09 5 views
1

私はカスタムpdo関数を解析するsqlコマンドを持っています。このコマンドは完全に機能します。Mysqlコマンドケースサブクエリと比較

SELECT table1.* FROM table1 
LEFT JOIN table2 ON table2.col1 = table1.col3 
WHERE table1.col4 = 'myVal' 
AND 2016-10-01 > (
SELECT MAX(loginDate) FROM table4 WHERE table4.id = table1.id 
) 

私が持っている問題は、私の例2016-10-01の値が列の値にdepenadntされていることです。たとえばtable1.col7 = 'foo'の場合、比較値は2016-10-01になります。 table1.col7 = 'bar'の場合、私は比較値を2016-09-01にします。 table1.col7 = 'test'の場合は、比較値を2016-08-01にします。それ以外の場合は、比較値を2016-07-01にします。

私はこの種の条件付けをmysqlでどのように実装するかに関するアイデアはありますか?

+0

あなたは 'php'、' mysqli'と 'PDOを使用しています'? –

+0

@RamaLingam私の質問はいずれかに当てはまる可能性があります。それはジェネリックSQL –

答えて

0

あなたが必要な日付値を生成するためにCASEを使用することができます。

SELECT table1.* 
FROM table1 
LEFT JOIN table2 ON table2.col1 = table1.col3 
WHERE table1.col4 = 'myVal' AND 
     CASE table1.col7 
     WHEN 'foo' THEN '2016-10-01' 
     WHEN 'bar' THEN '2016-09-01' 
     WHEN 'test' THEN '2016-08-01' 
     ELSE '2016-07-01' 
     END 
     > 
     (SELECT MAX(loginDate) FROM table4 WHERE table4.id = table1.id) 
0

変更をこのフォーマットに条件:

AND CASE WHEN table1.col7 = 'foo' THEN '2016-10-01' 
     WHEN table1.col7 = 'bar' THEN '2016-09-01' 
     .... END > (SELECT...)