Rumah  >  Soal Jawab  >  teks badan

mysql - masalah pernyataan pilihan mybatis

Peringatan mesej diteruskan, mesej ini mungkin orang lain membalas terus artikel anda Pada masa ini, anda perlu melakukan operasi pangkalan data untuk mengaitkan jadual artikel untuk mendapatkan kandungan artikel yang sepadan [Peringatan mesej: Terdapat balasan baharu. kepada artikel anda xxx], atau mungkin orang lain Selepas membalas ulasan anda, borang ulasan dikaitkan untuk mendapatkan kandungan ulasan [Peringatan mesej: Terdapat balasan baru untuk ulasan anda xxx]. mesej, butiran akan muncul seperti ini.

Struktur jadual pangkalan data adalah seperti berikut

mbelongbid ialah id artikel yang menjadi milik mesej, dan mbelongcid ialah id ulasan yang menjadi milik mesej.
Apabila mbelongcid kosong, bermakna mesej itu adalah balasan terus kepada artikel, dan jadual artikel dikaitkan pada masa ini
Apabila mbelongcid tidak kosong, ia bermakna objek balasan mesej adalah komen tertentu, dan jadual ulasan dikaitkan pada masa ini.

Bagaimana untuk menulis pernyataan SQL untuk memenuhi keperluan ini?
Pemikiran semasa saya ialah:

pilih

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

dari
(

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

</jika>

Terdapat masalah dengan menulisnya secara langsung seperti ini. Idea umum adalah untuk mengaitkan jadual yang berbeza untuk mendapatkan medan yang berbeza berdasarkan sama ada mbelongcid adalah nol.

过去多啦不再A梦过去多啦不再A梦2678 hari yang lalu1021

membalas semua(3)saya akan balas

  • 给我你的怀抱

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

    1. mbelongcid bukan sebahagian daripada parameter yang anda luluskan, jadi mybatis tidak tahu sama ada ia batal! , jika anda ingin merealisasikan logik yang anda inginkan, anda harus bermula dari sisi pangkalan data, seperti mencipta pandangan, yang terdiri daripada penyatuan dua pertanyaan.

    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. Apabila anda menghadapi sintaks pelik seperti ini semasa menulis program, sila semak pelan reka bentuk dahulu.

    2. Siapa yang mereka bentuk helaian data? Sekurang-kurangnya tambahkan garis bawah semasa menolak gaji, ahli parti pelajar, ambil masa anda.

    balas
    0
  • 过去多啦不再A梦

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

    Projek kami menggunakan SQL beranotasi Apabila menghadapi situasi sedemikian, kami terus menggunakan SQL dalam Penyedia untuk menyelesaikan masalah.

    balas
    0
  • 扔个三星炸死你

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

    Pernyataan dalam bahagian MessageMapper.xml ini adalah seperti berikut:

    kelas mesej adalah seperti berikut:

    balas
    0
  • Batalbalas