mysql - Problème d'instruction mybatis select
过去多啦不再A梦
过去多啦不再A梦 2017-06-20 10:05:48
0
3
996

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梦

répondre à tous(3)
给我你的怀抱
  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.

过去多啦不再A梦

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.

扔个三星炸死你

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

la classe de message est la suivante :

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!