php - pertanyaan berbilang jadual mysql
滿天的星座
滿天的星座 2017-05-25 15:08:10
0
3
782

Ada dua jadual, terangkan secara ringkas.

Jadual 1:
Jadual hubungan antara kursus dan pelajar
sid cid
1 | 1
1 | 2

Pelajar nombor 1 telah memilih kursus dengan cid 1 dan 2

Jadual 2:
Jadual kursus khusus d
hari cid mula tamat
1 | 2 | 14 | 16
2 | 2 | 13 | 15

Kursus cid ialah 1 pada hari Selasa 14:00-16:00

Selain itu, terdapat meja pelajar s, sid sname. Jadual kursus c, cid cname

Di sini dapat dilihat daripada r dan d bahawa 1 pelajar ini telah memilih dua kursus yang bercanggah. Bagaimana untuk menggunakan pernyataan sql untuk menanyakan rekod bercanggah tersebut?
Maksudnya, bagaimana dengan rekod seorang pelajar sid memilih cid yang bercanggah masa?

Anda boleh menggunakan sambungan untuk menanyakan cid yang sepadan dengan sid dan masa yang sepadan Kemudian bagaimana untuk menentukan sama ada kursus bercanggah dalam masa?

Lampiran: Senario soalan ini dilihat dalam set soalan Saya juga bersetuju dengan pertimbangan semasa memilih kursus

滿天的星座
滿天的星座

membalas semua(3)
阿神

Ini mudah untuk diselesaikan:

  1. Ketahui semua kursus yang pelajar ini telah mendaftar

  2. Semak sama ada terdapat sebarang konflik dalam masa kursus ini

    • Semak untuk melihat sama ada mereka berada pada hari yang sama Jika mereka berada pada hari yang sama, bandingkan masa mula dan tamat untuk melihat jika terdapat sebarang konflik atau pertindihan

    • .
    • Tiada masalah jika mereka tidak berada pada hari yang sama

Ditambah:

Namun, masalah ini harus dielakkan semasa mendaftar, dan tiada konflik dibenarkan.

Semasa mendaftar, semak sama ada terdapat percanggahan masa antara masa kursus yang dia telah daftar dan kursus yang telah dia daftarkan Jika ada konflik, pendaftaran tidak akan dibenarkan.

Untuk membandingkan dua tempoh masa pada garis masa untuk melihat jika terdapat sebarang konflik, ia sebenarnya mudah untuk dikira

A - B, C - D

A - C - B atau A - D - B

C - A - D atau C - B - D

Akan terdapat persimpangan antara empat situasi, menunjukkan konflik masa.

巴扎黑

Sebenarnya, saya berpendapat bahawa kursus yang bercanggah sebegini harus dinilai apabila pelajar memilih kursus, dan ia tidak sepatutnya ditambahkan pada pangkalan data

Kaedah:
Setiap kali pelajar memilih kursus, mula-mula gunakan masa kursus yang dipilih untuk bertanya sama ada data bercanggah semasa sudah wujud dalam pangkalan data

Contohnya:
Jika pelajar dengan sid = 1 telah memilih kursus dengan cid = 1, dan kemudian apabila memilih kursus dengan cid = 2, sql akan menjadi seperti berikut:

select * from r left join d on r.cid = d.cid where d.day = 2 and (d.start between 13 and 15 or d.end between 13 and 15)

Perkara yang anda semak ialah sama ada terdapat kursus yang dipilih dalam tempoh masa tersebut pada hari tersebut Jika ada keputusan, bermakna masa kursus yang anda pilih bercanggah dengan kursus yang anda daftarkan #🎜🎜. #

習慣沉默

Masalah sebegini boleh diselesaikan dengan penyambungan diri.

select tmp1.sid,tmp1.cid,tmp2.cid 
    from 
        (select a.sid,a.cid,b.day,b.start,b.end from tbl1 a inner join tbl2 on a.cid=b.cid) tmp1 
        left join  (select a.sid,a.cid,b.day,b.start,b.end from tbl1 a inner join tbl2 on a.cid=b.cid) tmp2 
            on tmp1.sid = tmp2.sid and tmp1.cid<>tmp2.cid and tmp1.day = tmp2.day
    where (tmp1.start > tmp2.start and tmp1.start < tmp2.end) 
        or (tmp1.end > tmp2.end and tmp1.end < tmp2.end)
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan