MySQL – Mybatis-SELECT-Anweisungsproblem
过去多啦不再A梦
过去多啦不再A梦 2017-06-20 10:05:48
0
3
1066

Nachrichtenerinnerung fortgesetzt, diese Nachricht könnte bedeuten, dass jemand anderes direkt auf Ihren Artikel geantwortet hat. Zu diesem Zeitpunkt müssen Sie Datenbankoperationen durchführen, um die Artikeltabelle zuzuordnen, um den Inhalt des entsprechenden Artikels zu erhalten. [Nachrichtenerinnerung: Es gibt eine neue Antwort zu Ihrem Artikel xxx], oder es kann sich um eine andere Person handeln. Nachdem Sie auf Ihren Kommentar geantwortet haben, wird das Kommentarformular verknüpft, um den Inhalt des Kommentars zu erhalten [Nachrichtenerinnerung: Es gibt eine neue Antwort auf Ihren Kommentar xxx]. Nachricht, die Details werden wie folgt angezeigt.

Die Datenbanktabellenstruktur ist wie folgt

mbelongbid ist die ID des Artikels, zu dem die Nachricht gehört, und mbelongcid ist die ID des Kommentars, zu dem die Nachricht gehört.
Wenn mbelongcid leer ist, bedeutet dies, dass die Nachricht eine direkte Antwort auf den Artikel ist und die Artikeltabelle zu diesem Zeitpunkt verknüpft ist.
Wenn mbelongcid nicht leer ist, bedeutet dies, dass das Nachrichtenantwortobjekt ein bestimmter Kommentar ist Die Kommentartabelle ist zu diesem Zeitpunkt verknüpft.

Wie schreibe ich SQL-Anweisungen, um diese Anforderung zu erfüllen?
Meine aktuellen Gedanken sind:

auswählen

r.*, 
<if test="mbelongcid == null">`blog`.btitle</if>
<if test="mbelongcid != null">`comment`.ccontent</if>

von
(

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>

Es gibt ein Problem damit, es direkt so zu schreiben. Die allgemeine Idee besteht darin, verschiedene Tabellen zuzuordnen, um unterschiedliche Felder zu erhalten, je nachdem, ob mbelongcid null ist.

过去多啦不再A梦
过去多啦不再A梦

Antworte allen(3)
给我你的怀抱
  1. mbelongcid不是你传入的参数的一部分,所以mybatis并不知道它到底是不是null!,你要实现你想要的这种逻辑应该从数据库端去着手,比如创建一个视图,这个视图由两个查询union而成。

select mid, mreferuid, 'blog' as type, mbelongbid as rid
from message m, blog b
where mbelongcid  is null and mbelongbid is not null and mbelongbid = b.bid
union
select mid, mreferuid, 'comment' as type, mbelongcid as rid
from message m, comment c
where mbelongcid is not null and mbelongcid = c.cid
  1. 当你写程序遇到这种需要很奇怪的语法的时候,请先回顾一下设计方案,通常缘由都是设计就有问题。

  2. 数据表谁设计的?扣工资 至少要加个下划线啊m_belong_cid,学生党,慢慢来吧。

过去多啦不再A梦

我们项目用的是注解式SQL,遇到这类情况都是直接在Provider拼SQL解决。

扔个三星炸死你

MessageMapper.xml这部分的语句如下:

message类如下:

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage