recherche

Maison  >  Questions et réponses  >  le corps du texte

mysql - Problème d'instruction mybatis select

Rappel de message suite, ce message peut être quelqu'un d'autre qui a répondu directement à votre article. À ce moment, vous devez effectuer des opérations de base de données pour associer la table d'articles afin d'obtenir le contenu de l'article correspondant [Rappel de message : Il y a une nouvelle réponse. à votre article xxx], ou il peut s'agir de quelqu'un d'autre. Après avoir répondu à votre commentaire, le formulaire de commentaire est associé pour obtenir le contenu du commentaire [Rappel du message : Il y a une nouvelle réponse à votre commentaire xxx]. message, les détails apparaîtront comme ceci.

La structure des tables de base de données est la suivante

mbelongbid est l'identifiant de l'article auquel appartient le message, et mbelongcid est l'identifiant du commentaire auquel appartient le message.
Lorsque mbelongcid est vide, cela signifie que le message est une réponse directe à l'article, et la table article est associée à ce moment-là.
Lorsque mbelongcid n'est pas vide, cela signifie que l'objet de réponse au message est un certain commentaire, et le la table de commentaires est associée à ce moment.

Comment écrire des instructions SQL pour répondre à cette exigence ?
Mes pensées actuelles sont :

sélectionner

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

de
(

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

</si>

Il y a un problème avec l'écriture directe comme ceci. L'idée générale est d'associer différentes tables pour obtenir différents champs selon que mbelongcid est nul. Existe-t-il de bonnes solutions ou suggestions ?

过去多啦不再A梦过去多啦不再A梦2714 Il y a quelques jours1059

répondre à tous(3)je répondrai

  • 给我你的怀抱

    给我你的怀抱2017-06-20 10:07:48

    1. mbelongcid ne fait pas partie des paramètres que vous avez transmis, donc mybatis ne sait pas s'il est nul ! , si vous souhaitez réaliser la logique souhaitée, vous devez commencer par le côté base de données, par exemple en créant une vue composée de l'union de deux requêtes.

    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. Lorsque vous rencontrez ce genre de syntaxe étrange lors de l'écriture d'un programme, veuillez d'abord examiner le plan de conception. Généralement, la raison est qu'il y a un problème avec la conception.

    2. Qui a conçu la fiche technique ? Ajoutez au moins un trait de soulignement lors de la déduction des salaires m_belong_cid, membres du parti étudiant, prenez votre temps.

    répondre
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-20 10:07:48

    Notre projet utilise du SQL annoté Lorsque nous rencontrons de telles situations, nous utilisons directement SQL dans le fournisseur pour résoudre le problème.

    répondre
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-20 10:07:48

    Les déclarations dans cette partie de MessageMapper.xml sont les suivantes :

    la classe de message est la suivante :

    répondre
    0
  • Annulerrépondre