頁:
[1]
SQL 語句求解
廣告欄張貼主檔 custom_data_1014,欄位有:data_id(主鍵)、application_date(申請日期)、postdate_begin(張貼日期)、postdate_end(截止日期)。
明細檔 custom_data_1014_ad_list,欄位有:
data_id(外鍵)、ad_id(廣告欄編號)。
過帳檔 custom_data_1020,欄位有:
Data_id(主鍵)、id(廣告欄編號)、postdate(張貼日期)、post_qty(張貼份數)
此表已建立 id + 全年日曆、post_qty =0 的基本資料。
需求:
從張貼主檔及明細檔,查找出當日申請者,將過帳檔對應的 id + postdate 的張貼數量加1。
SQL 語句:
UPDATE custom_data_1020 as e,
(SELECT b.data_id, b.ad_id, a.postdate_begin, a.postdate_end
from custom_data_1014_ad_list b
join custom_data_1014 a on a.data_id = b.data_id
WHERE b.data_id IN (SELECT data_id from custom_data_1014 where application_date = DATE_FORMAT(now(),"%Y-%m-%d"))
) as d
SET e.post_qty = e.post_qty + 1
WHERE e.id = d.ad_id and (postdate BETWEEN d.postdate_begin and d.postdate_end)
中間 select … as d 查詢結果如下:
data_id, ad_id ,postdate_begin, postdate_end
36, 01, 2020-06-26, 2020-08-07
36, 02, 2020-06-26, 2020-08-07
37, 01, 2020-06-26, 2020-07-03
37, 02, 2020-06-26, 2020-07-03
37, 03, 2020-06-26, 2020-07-03
問題:
例如以上查詢結果,id = 01,postdate = 6/26,累計應該為2。
執行結果Ad_id = 01 , postdate=6/26~8/7,post_qty皆為1。
AD_ID=02, postdate=6/26~8/7也是一樣的情況,累計只有1。
請教高手指點,以上 SQL 如何修正?
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div> 主要的邏輯應是:
UPDATE custom_data_1020 SET post_qty=post_qty + 1
WHERE id in (SELECT ... )
不過由於你的題目不是很清楚: 過帳檔對應的 id + postdate 的張貼數量加1
這個意思不是很清楚。
所以SELECT的部份還不知道應怎麼寫。
再仔細看你的帖, 如果你要更新的過帳檔條件是: 1. 當天申請, 且 2.過帳檔的張貼日期必須在主檔的張貼期間; 那麼, SQL可以這樣寫:
UPDATE custom_data_1020 SET post_qty=post_qty + 1
WHERE id in
(SELECT ad_id
FROM custom_data_1014_ad_list a, custom_data_1014 b
WHERE a.data_id = b.data_id AND (postdate BETWEEN b.postdate_begin AND b.postdate_end)
AND b.application_date = DATE_FORMAT(now(),"%Y-%m-%d"))
感謝回覆。
我是初學 MySQL ,覺得它的應用真是千變萬化.....真讓人頭疼! danz0403 發表於 2020-6-23 01:57 PM static/image/common/back.gif
再仔細看你的帖, 如果你要更新的過帳檔條件是: 1. 當天申請, 且 2.過帳檔的張貼日期必須在主檔的張貼期間; ...
感謝回覆。
第5行中,欄位 postdate 僅存在於 custom_data_1020 中。
最後完成的 SQL 語句如下:
update custom_data_1020 P,
(
SELECT receipt_no, application_date, postdate_begin, postdate_end, ad_id, L.postdate, L.id, count(*) count
from custom_data_1014 M
join custom_data_1014_ad_list D on D.data_id=M.data_id
join custom_data_1020 L on L.id=D.ad_id and L.postdate between M.postdate_begin and M.postdate_end
where M.application_date=DATE_FORMAT(now(),"%Y-%m-%d")
GROUP BY id, postdate
order by id, postdate
) as N
set P.post_qty=P.post_qty+N.count
where P.id = N.id and P.postdate = N.postdate...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>
頁:
[1]