2017-02-14 7 views
1

Ich baue derzeit ein Anwesenheitssystem auf, bei dem nur eine bestimmte Person (A) sich anmelden und die Anwesenheit einer anderen Person (B, C, D) übernehmen kann. Lassen Sie mich ein Beispiel geben, this is the database exampleWie verbinde ich jede Person in einer Tabelle mit einer anderen Tabelle bzw. in einer Datenbank?

Wie Sie sehen können, gibt es dort drei Tische, login_user, school_A (CGA) und school_B (AES). Die Person in der login_user Tabelle ist die Person (A), die ich oben erwähnt habe.

Die anderen zwei Tabellen sind völlig unterschiedliche Schule, die school_A (CGA) und school_B (AES) ist. Wie Sie sehen können user_ID genannten CGA001 und CGA002 sind in der school_A (CGA) Tabelle und AES001 ist in der school_B (AES) Tabelle. Die user_ID Spalte in den school_A (CGA) und school_B(AES) Tabellen, die CK11213 ist, CK11214, AK4143, AK4144 und AK4145 sind die Schüler in jeder Schule - Person (B, C, D).

Mein Problem gerade jetzt, wie das jede Person in login_user Tabelle zu den school_A (CGA) und school_B (AES) Tabellen jeweils zu verbinden, die user_ID bedeutet, dass CGAxxx müssen school_A (CGA) und das hat AESxxx-school_B (AES) verbinden wird eine Verbindung herstellen.

Im mit php, mysqli und html im Herstellungsprozess. Und ja, ich bin ein totaler Anfänger.

Ich habe bereits recherchiert und finde nichts, was mein Problem lösen könnte, vielleicht habe ich sie übersehen.

Wenn Sie einen Vorschlag oder eine Alternative haben, um meine Tabellenstruktur zu ändern, bitte sagen Sie mir. Ich werde alles akzeptieren.

Vielen Dank im Voraus.

+0

Anfänger aber wenn Sie über Fremdschlüssel wissen, als Sie sehen können beide B-und A-Tabellen haben user_id Bedeutung beide mit Benutzern verbunden sind –

+0

okay, ich werde es versuchen. danke für den Vorschlag. – Haniff

Antwort

0

Ein paar Fragen zuerst zu adressieren:

1) Sieht aus wie Benutzer john, mary, und olivia hat keine Teilnahme genommen, deshalb gehören sie nicht in die Tabellen school_A und school_B, die die Anwesenheit für jede Schule scheint. Fügen Sie stattdessen der Tabelle login_user ein Feld hinzu, aus dem ersichtlich ist, für welche Schule der Benutzer zuständig ist, school_ID.

2) Die Tabellen school_A und school_B halten die gleichen Daten, user_ID, name und attendance und existieren nur auf „Art“ die Schüler von der Schule. Wenn ein Schüler die Schule wechselt, muss er aus dem einen entfernt und dem anderen hinzugefügt werden. Kombinieren Sie stattdessen die beiden Tabellen in eine Tabelle, attendance, fügen Sie ein Feld hinzu, um zu identifizieren, an welchem ​​Schhol sie teilnehmen, school_ID. Fügen Sie dann eine neue Tabelle school mit den Feldern school_ID und name, mögliches drittes Feld school_code für die "CGA" und "AES" in Ihren Beispieldaten hinzu, wenn das eine wichtige Information ist.Dies erleichtert es, Schüler von einer Schule in eine andere zu versetzen, und erlaubt das Hinzufügen neuer Schulen, ohne jedes Mal einen neuen Tisch zu haben.

Dies gibt Ihnen diese Datenbankstruktur:

enter image description here

die Menschen wählen (B, C, D) eine bestimmte Person (A) kann sich anmelden und nehmen Sie die Teilnahme Nutzungs

SELECT login_user.name AS taker, school_code, attendance.name AS student FROM login_user LEFT JOIN school USING (school_ID) LEFT JOIN attendance USING (school_ID) WHERE login_user.user_ID='CGA002'; 

Um eine Liste aller Personen zu erstellen, die sich anmelden und die Teilnahme an einer einzelnen Schule (die mehr als einen Anwesenheitsnachweis enthalten kann) für die Teilnehmer anzeigen können, verwenden Sie

SELECT login_user.name AS taker, school_code, attendance.name AS student FROM login_user LEFT JOIN school USING (school_ID) LEFT JOIN attendance USING (school_ID) WHERE school_code='CGA'; 

Um eine vollständige Liste aller Anwesenheits Nehmer, verbunden zu schaffen, die sie die Teilnahme für nehmen können, verwenden

SELECT login_user.name AS taker, school_code, attendance.name AS student FROM login_user LEFT JOIN school USING (school_ID) LEFT JOIN attendance USING (school_ID) ORDER BY school_code; 

Wenn Sie eine dritte oder vierte, Schule hinzufügen, können Sie nur die Daten hinzufügen müssen in die school Tabelle und fügen Sie die neuen Personen in die eine Tabelle, die sie gehören, entweder login_user, oder attendance mit der Schule_ID, die sie zugeordnet sind.

Natürlich sollten die Namen der Felder in den Tabellen etwas spezifischer sein, und ich stelle mir vor, dass Ihre Tabellen mehr Felder haben als angegeben. in der login_user Tabelle sollte es etwas wie sein: login_ID, school_ID, login_name, pass. Die attendance Tabelle etwas wie: student_ID, school_ID, student_name, attendance.

Die MySQL online manual ist ein guter Ort, um alle Details zu finden.

+0

okay. großer Vorschlag. Ich denke, dass ich die Datenbank basierend auf Ihrem Vorschlag erstellen werde. Übrigens, wer ist der "Nehmer", den Sie im SELECT-Befehl erwähnt haben? Name oder was ist das? Es tut mir leid, wenn das eine dumme Frage ist, aber ich muss es wissen. – Haniff

+0

'Taker' in der Abfrage ist ein 'Alias' für das' name' Feld der 'login_user' Tabelle. Das liegt daran, dass alle Tabellen, mit denen Sie begonnen haben, in ihnen "Namen" hatten und eine Liste von Namen, ohne zu wissen, welches das nicht viel Sinn ergibt. Ich wählte das Wort "Nehmer", da es die Person ist, die anwesend ist. Macht Sinn, wenn es ein Lehrer ist, aber die Frage hat nie gesagt. In ähnlicher Weise erhielt die "Anwesenheits" -Tabelle das Feld "Name" das Alias ​​"Student". Bei der Planung Ihrer Tabellen hilft Ihnen das Nachdenken über die Verwendung der Feldnamen, dieses Problem zu vermeiden. Wählen Sie Namen, die funktionieren, ohne gleich zu sein. –

+0

in Ordnung. jetzt verstehe ich. Vielen Dank für Ihre Datenbankstruktur und Beratung. Jetzt kann ich meine Datenbank weiter bearbeiten. Danke noch einmal. – Haniff

0
SELECT * FROM login_users lg LEFT JOIN school_A a ON lg.user_ID = a.user_ID 
LEFT JOIN school_B b ON lg.user_ID=b.user_ID 

Diese wählt Benutzer mit seinen jeweiligen Daten aus jeder Tabelle

+0

okay. Sagen wir, ich füge eine weitere Tabelle hinzu, die schul_C (GHK) ist. also muss ich den Befehl oben erneut eingeben? – Haniff

+0

Welcher Befehl? Der sql wird benötigt, um die Daten aus der Datenbank auszuwählen, einzufügen, zu aktualisieren oder zu löschen. Also, wenn Sie Daten abrufen möchten, müssen Sie sql –

+0

den Befehl schreiben, den Sie oben geschrieben haben. wie folgt: 'SELECT * FROM login_users lg LEFT JOIN Schule_A a ON lg.user_ID = a.user_ID LEFT JOIN Schule_B b ON lg.user_ID = b.user_ID' – Haniff

Verwandte Themen