2010-11-22 11 views
0

サブクエリの返す行数をクエリ自体で取得したいと思います。次に、ifの場合はメインのクエリで使用します。私は例を追加し、ダミー文字列としてQUERY_ROW_COUNTを配置しました。これを実現する関数はありますか?事前のおかげで...よろしく...mysqlクエリ自体の行数を取得

SELECT period_id, 
     lt_id, 
     period_name, 
     min_stay, 
     IF(QUERY_ROW_COUNT=1, 1,0) as tag 
    FROM (SELECT period_id, 
       lt_id, 
       period_name, 
       min_stay, 
       fromDate, 
       toDate, 
       DATEDIFF('2010-12-27', '2010-12-10') as totalDays, 
       nightly_rate, 
       case when ('2010-12-10' > fromDate AND '2010-12-27' < toDate) then 
        DATEDIFF('2010-12-27', '2010-12-10') 
        else 0 
       end as d6, 
       case when ('2010-12-10' > fromDate AND '2010-12-27' > toDate) then 
        DATEDIFF(toDate, '2010-12-10')+1 
        else 0 
       end as d7, 
       case when ('2010-12-10' < fromDate AND '2010-12-27' < toDate) then 
        DATEDIFF('2010-12-27', fromDate) 
        else 0 
       end as d8, 
       case when ('2010-12-10' < fromDate AND '2010-12-27' > toDate) then 
        DATEDIFF(toDate, fromDate) 
        else 0 
       end as d9  
      FROM `lt_hperiods` 
     WHERE ('2010-12-10' BETWEEN Date(fromDate) AND Date(toDate) ) 
      OR ('2010-12-27' BETWEEN Date(fromDate) AND Date(toDate)) 
      OR ('2010-12-10' <= fromDate AND '2010-12-27' >= toDate) 
      AND (lt_id=1)) MQS 

答えて

0

(解決済み...これは作業中のソリューションをスキャンしているタグです:)すべての提案に感謝します。 私はすでにすべての合計とカウント関数を試したことを書いて忘れて..私はしかし、このような私の問題sthを解決..私はこれが誰かに役立つことを願っています。

set @countT = 0; 
set @rowCount = 0; 

SELECT MQ.period_id, MQ.lt_id, MQ.period_name, MQ.min_stay, MQ.fromDate, MQ.toDate, MQ.nightly_rate, MQ.periodDays, 
MQ.totalDays, 
@countT := if(@countT = MQ.periodDays, 0 , @countT + MQ.periodDays) as periodDaysTotal, 
@rowCount:= @rowCount +1 
FROM (
SELECT period_id, lt_id, period_name, min_stay, fromDate, toDate, totalDays, nightly_rate, (d1+d2+d3+d4+d5+d6+d7+d8+d9) periodDays 

FROM 

(SELECT period_id, lt_id, period_name, min_stay, fromDate, toDate, DATEDIFF('2010-05-02', '2010-03-10') as totalDays, nightly_rate, 

case when ('2010-03-10' > fromDate AND '2010-05-02' < toDate) then DATEDIFF('2010-05-02', '2010-03-10') else 0 end as d6, 
case when ('2010-03-10' > fromDate AND '2010-05-02' > toDate) then DATEDIFF(toDate, '2010-03-10') else 0 end as d7, 
case when ('2010-03-10' < fromDate AND '2010-05-02' < toDate) then DATEDIFF('2010-05-02', fromDate) else 0 end as d8, 
case when ('2010-03-10' < fromDate AND '2010-05-02' > toDate) then DATEDIFF(toDate, fromDate) else 0 end as d9 

FROM `lt_hperiods` 
WHERE 
('2010-03-10' BETWEEN Date(fromDate) AND Date(toDate) ) OR 
('2010-05-02' BETWEEN Date(fromDate) AND Date(toDate)) 
OR ('2010-03-10' <= fromDate AND '2010-05-02' >= toDate) 
AND (lt_id=1) 
) MQS) MQ 

http://www.xaprb.com/blog/2006/12/02/how-to-number-rows-in-mysql/

これはコードです:mysqlのは、あなたが素晴らしいです動的変数を定義することができます。これは、参照です

0

あなたのメインクエリの選択にMQS.some_variableとしてそれを参照してください。そして、あなたのメインfrom句で選択のインラインでcount(1) as some_variableを使用することができます。

0

QUERY_ROW_COUNTさんがいる場所でCOUNT(*)かCOUNT(DISTINCT period_id)を試しましたか?

関連する問題