2017-03-21 14 views
0

このクエリがあり、where句にユーザー定義変数@noVarを使用して、その変数に値 'Yes'のレコードのみを表示しようとしています。 しかし、私は以下のクエリのように@noVar = 'Yes'を使用すると、0の結果を返します。where句でユーザー定義変数を使用する方法

SELECT svcreqdetail.id, svcreqcheckin.stime as checkin, @etime:=  time(timestampadd(minute, svcreqdetail.hours*60 , concat(caredate,' ', caretime))) as endtime, svcreqcheckout.stime as checkout, time_to_sec(if(svcreqcheckout.stime > svcreqcheckin.stime, 
      timediff(svcreqcheckout.stime, svcreqcheckin.stime), 
      addtime(timediff(svcreqcheckout.stime, svcreqcheckin.stime), '24:00:00.000000')))/3600 AS wrkHrs, svcreqdetail.hours, 
svcreqstatus.status, @checkoutvar:= time_to_sec(timediff(svcreqcheckout.stime, @etime))/60 as checkoutvar,@noVar:= if (@checkoutvar <= 15,'Yes', 'No') as noVar, qualif 
FROM svcreqdetail 
LEFT JOIN svcreqcheckin ON svcreqcheckin.reqid = svcreqdetail.id 
LEFT JOIN svcreqcheckout ON svcreqcheckout.reqid = svcreqdetail.id 
JOIN svcreqstatus ON svcreqstatus.reqdid = svcreqdetail.id 
WHERE (yearweek(caredate) = yearweek(date_sub(CURRENT_DATE, INTERVAL 1 week)) 
AND svcreqstatus.status != 'Incompleted' 
AND svcreqstatus.status != 'Deleted') 
having @noVar = 'Yes' 

とにかく、私のwhere句でその変数に対してテストできます。ありがとうございます

+0

1つのオプションはそうのように、サブ問合せに(HAVING句なし)、既存のクエリを入れて、サブクエリの外WHERE句を使用して結果をフィルタリングするだろうユーザー定義の変数は?通常は、パラメータ化されたクエリ/ prepared文を使用しました。使用されている言語についての情報を提供できますか?またはこれは唯一のストアドプロシージャですか? – Jpsh

+0

それはselect句で定義されていますが、私はPHPを使用していますが、他の列の計算からそれを定義しているため、@noVar変数はクエリ内で計算する必要があります – LaliNonda

答えて

0

私はあなたがそのようなHAVING節でユーザ定義変数を使用することはできないと思います。ここで

SELECT * 
FROM 
(
    <your existing query goes here> 
) AS sub_query 
WHERE noVar = 'Yes' 
+0

ありがとうございました。その解決策が働いた。 – LaliNonda

関連する問題