訊息提醒續,這個訊息可能是別人直接回覆了你的文章,這時需要進行資料庫操作關聯文章表獲取相應文章的內容【訊息提醒:您的文章xxx有了新的回應】,也可能是別人回覆了你的評論這時關聯的就是評論表來獲取評論的內容【訊息提醒:您的評論xxx有了新的回應】,訊息點擊後即可出現顯示詳情這樣子。
資料庫表結構如下
#mbelongbid為訊息所屬的文章的id,mbelongcid為訊息所屬的評論的id。
當mbelongcid為空時說明訊息是直接回覆文章,此時關聯的是文章表;
當mbelongcid不為空時說明訊息回覆的物件是某則評論,此時關聯的是評論表。
sql語句要怎麼寫才能符合這種需求?
現在的想法是:
select
r.*,
<if test="mbelongcid == null">`blog`.btitle</if>
<if test="mbelongcid != null">`comment`.ccontent</if>
from
(
select
mid, mreferuid, mbelongbid, mbelongcid
from
message
where mid = #{_parameter}
)r,
<if test="mbelongcid == null">
`blog` where r.mbelongbid = `blog`.bid
</if>
<if test="mbelongcid != null">
`comment` where r.mbelongcid = `comment`.cid
</if>
直接這樣寫是有問題的,大致的想法就是根據mbelongcid是否為null去關聯不同的表獲取不同的字段,有沒有好的解決方案或者建議?
mbelongcid不是你傳入的參數的一部分,所以mybatis並不知道它到底是不是null! ,你要實現你想要的這種邏輯應該從資料庫端去著手,例如建立一個視圖,這個視圖由兩個查詢union而成。
當你寫程式遇到這種需要很奇怪的語法的時候,請先回顧一下設計方案,通常緣由都是設計就有問題。
資料表誰設計的?扣工資 至少要加個底線啊m_belong_cid,學生黨,慢慢來吧。
我們專案用的是註解式SQL,遇到這類情況都是直接在Provider拼SQL解決。
MessageMapper.xml這部分的語句如下:
message類別如下: