Heim > Fragen und Antworten > Hauptteil
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.给我你的怀抱2017-06-20 10:07:48
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
当你写程序遇到这种需要很奇怪的语法的时候,请先回顾一下设计方案,通常缘由都是设计就有问题。
数据表谁设计的?扣工资 至少要加个下划线啊m_belong_cid,学生党,慢慢来吧。