php - requête multi-tables mysql
滿天的星座
滿天的星座 2017-05-25 15:08:10
0
3
778

Il y a deux tableaux, décrivez-les brièvement.

Tableau 1 :
Tableau des relations entre cours et étudiants
sid cid
1 | 1
1 | 2

L'étudiant numéro 1 a choisi des cours avec cid 1 et 2

Tableau 2 :
Horaire spécifique des cours d
cid journée début fin
1 | 2 | 14 | 16
2 | 2 | 13 | 15

Le cid du cours est 1 le mardi de 14h00 à 16h00

En plus, il y a la table des étudiants, sid sname. Horaire des cours c, cid cname

Ici, on peut voir d'après r et d que 1 cet étudiant a choisi deux cours contradictoires. Comment utiliser l'instruction SQL pour interroger de tels enregistrements contradictoires ?
Autrement dit, qu'en est-il du dossier d'un étudiant choisissant un cid avec une heure conflictuelle ?

Vous pouvez utiliser la connexion pour interroger le cid correspondant au sid et l'heure correspondante. Alors comment déterminer si les cours sont en conflit dans le temps ?

Pièce jointe : le scénario de cette question est ce que j'ai vu dans un ensemble de questions. Je suis également d'accord avec le fait de porter des jugements lors du choix des cours

.
滿天的星座
滿天的星座

répondre à tous(3)
阿神

C'est facile à résoudre :

  1. Découvrez tous les cours auxquels cet étudiant s'est inscrit

  2. Vérifiez s'il y a des conflits dans le temps de ces cours

    • Vérifiez s'ils sont le même jour, s'ils sont le même jour, comparez les heures de début et de fin pour voir s'il y a un conflit

    • .
    • Ce n'est pas grave s'ils ne sont pas le même jour

Supplément :

Cependant, ce problème doit être évité lors de l'inscription, et les conflits ne seront pas autorisés.

Lors de votre inscription, vérifiez s'il y a un conflit horaire entre l'heure du cours auquel il s'est inscrit et les cours auxquels il s'est déjà inscrit. En cas de conflit, l'inscription ne sera pas autorisée.

Quant à comparer deux périodes sur la chronologie pour voir s'il y a un conflit, il est en fait facile de calculer

A - B, C - D

A - C - B ou A - D - B

C - A - D ou C - B - D

Il y aura une intersection entre les quatre situations, indiquant un conflit temporel.

巴扎黑

En fait, je pense que de tels cours contradictoires devraient être jugés lorsque les étudiants choisissent des cours, et ils ne devraient pas être ajoutés à la base de données

Méthode :
Chaque fois qu'un étudiant sélectionne un cours, utilisez d'abord l'heure du cours sélectionné pour demander si les données conflictuelles actuelles existent déjà dans la base de données

Par exemple :
Supposons qu'un étudiant avec sid = 1 ait choisi un cours avec cid = 1, puis lors du choix d'un cours avec cid = 2, le sql sera le suivant :

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)

Ce qui est vérifié, c'est s'il y a un cours sélectionné dans cette période ce jour-là. S'il y a un résultat, cela signifie que l'heure du cours que vous avez sélectionné est en conflit avec le cours auquel vous vous êtes inscrit

.
習慣沉默

Ce genre de problème peut être résolu par l'auto-connexion.

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)
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal