Rumah  >  Soal Jawab  >  teks badan

php - pertanyaan berbilang jadual mysql

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

滿天的星座滿天的星座2703 hari yang lalu738

membalas semua(3)saya akan balas

  • 阿神

    阿神2017-05-25 15:10:10

    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.

    balas
    0
  • 巴扎黑

    巴扎黑2017-05-25 15:10:10

    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 #🎜🎜. #

    balas
    0
  • 習慣沉默

    習慣沉默2017-05-25 15:10:10

    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)

    balas
    0
  • Batalbalas