mysql statement: komplexe abfrage über 2 tabellen
Lars
- php
Hallo zusammen,
beim erstellen eines registers meines abi-jahrgangs habe ich folgendes problem:
in Tabelle tbl_1 liegen daten über benutzer.
eine spalte beinhaltet den studiengang als nummer, in einer zweiten
tabelle tbl_2 liegen nun die nummern mit dem dazugehörigen namen des studiengangs.
Nun suche ich zum beispiel in der datenbank nach einer emailadresse
und lasse mir dann die komplette tabelle anzeigen. Nun möchte ich aber anstatt der Nummer des studiengangs den namen.
ist eine solche abfrage in einem sql-staement möglich?
ich habe bisher nur mit "trivialen" sql-stements gearbeitet, daher stehe ich hier vor einem problem :)
über eine antwort würde ich mich freuen
ich danke euch.
mfg
Lars
Hi,
du brauchst einfach nur dies zu machen
SELECT * FROM tabelle1, tabelle2 WHERE tabelle1.ID = tabelle2.FeldID
Dabei habe ich jetzt angenommen dass es in Tabelle 1 ID heißt was in Tabelle 2 in dem Feld FeldID steht...
Außerdem hab ich jetzt einfach mal alles abgefragt mit dem *
Hoffe es hilft dir
Hi,
SELECT * FROM tabelle1, tabelle2 WHERE tabelle1.ID = tabelle2.FeldID
Du kannst aber auch direkt den Namen suchen
SELECT tabelle2.name FROM tabelle1, tabelle2 WHERE tabelle1.nummer = tabelle2.nummer
ducrch <tabellenname>.<spaltenname> kannst Du direkt auch einzelen Spalten zugreifen. Alternativ kannst Du auch Aliasnamen vergeben.
z.B.
SELECT b.name FROM tabelle1 a, tabelle2 b WHERE a.nummer = b.nummer
ciao
romy
hi,
vielen dank für eure antwort.
das habe ich hinbekommen, dann dachte ich mir geht es einfach, eine 3. tabelle ins spiel zu bringen.
aber da bin ich wieder mal gescheiter.
währe nett, wenn irh euch das hier ansehen könntet.
in bereich ist angegeben, in welchen Beriech die Leute jetzt tätig sind und in study was sie studieren.
entsprechen sind in den tabellen tbl_abi_study und tbl_abi_bereich jeweils die Nr und der name angeben.
$_POST[breich] wird aus einer suchmaske übergeben, wenn man nach einem bereich sucht.
$sql = "SELECT Vorname, Name, Email, tbl_sih_bereich.Bereich, tbl_sih_study.Study ";
$sql .= "FROM tbl_abi, tbl_abi_bereich, tbl_abi_study ";
$sql .= "WHERE ";
$sql .= "tbl_abi.Bereich=tbl_abi_bereich.Nr AND ";
$sql .= "tbl_abi_bereich.Bereich='".$_POST[bereich]."' ";
bis hierhin löppt alles, wenn ich oben nur Study habe und nicht tbl_abi_study.Study.
$sql .= "AND WHERE ";
$sql .= "tbl_abi_study.Nr=tbl_abi.Study";
jetzt soll in der ausgabe natürlich nicht bei study eine nummer stehen, sondern z.B. Physik oder BWL.
da dachte ich mir packe ich mal das statement hinten dran, aber leider weit gefehlt...
ich danke euch.
mfg
lars
Hi Lars,
$_POST[bereich] ? ist bereich eine Konstante oder meinst Du $_POST["bereich"]?
ich muss Deine Angaben erstmal sortieren, sorry
Du hast also 3 Tabellen:
tbl_sih_bereich (??)
tbl_abi (nummer,name, vorname, email, etc)
tbl_abi_study (nummer, Studienfach)
Du willst aus diesen 3 Tabellen den Namen, Vornamen, Email,bereich und Study.
Haben diese drei Tabellen eine gemeinsame Schnittstelle?
Wenn Du diese Tabellen im Statement nur per Komma aneinanderreihst machst Du jedesmal einen Full-Join, was nicht gerade sehr sauber ist. Bei Zwei Tabellen mag es noch gehen.
Ich bräuchte mal genauere Angaben (ich habe es noch nicht ganz verstanden), was in den Tabellen drinsteht und welche Spalten Du angezeigt bekommen möchtest und unter welcher Bedingung.
ciao
romy
Hi Lars,
$_POST[bereich] ? ist bereich eine Konstante oder meinst Du $_POST["bereich"]?
in $_POST[bereich] wird etwas aus einer suchmaske übertragen.
dort steht dann z.B. Wirtschaft oder Medizin. diese daten kommen
aus einem formular,
Du hast also 3 Tabellen:
tbl_abi (Nr, BereichNr, StudyNr,name, vorname, email, etc)
tbl_abi_study (StudyNr, Studienfach)
tbl_abi_bereich (BereichNr, Bereich)
Nr bei tbl_abi ist nur eine laufende Nummer mit autoincrement
so isses richtig :)
Folgendes zum Aufbau der ganzen sache:
in tbl_abi stehen jeweils nur die nummern der entsprechenden bereiche bzw. des Studiengangs um platz zu sparen.
Müsste wohl die 2. Normalform für Datenbanktabellen sein.
So, nun übergebe ich per suchmaske den Bereich Medizin.
Um nun die Leute zu finden, die im Bereich Medizin studieren muss ich also die Nummer finden, die Medizin hat. Hat der User nun auch noch Zahnmidizin bei Study eingegeben muss man auch noch nachsehen welche Nummer Zahnmedizin hat.
man soll nach Bereich & Study suchen können oder nach nur einem davon, sprich 3 möglichkeiten.
Das man nach beidem zusammen suchen kann, ergibt sich daraus, dass einige Studiengänge zu unterschiedlichen Bereichen gehören können.
sucht der user nun nach Bereich und Study wird via POST-Variable die jewilige Bezeichnung übergeben. $_POST[Bereich] und $_POST[Study].
Die suche ich ja nicht das problem, sondern die Ausgabe des Ergebnisses.
Die Ausgabe erfolgt in einer Tabelle in der nun anstelle der Nr für Bereich und Study der entsprechende Name des Bereiches oder des Studienganges stehen.
Fazit:
ich suche eine Anweisung, die mir die daten aus tbl_abi rausholt und
so wiedergibt, dass anstelle der Nummern für Bereich und Study die entsprechenden Bezeichnungen zu lesen sind.
So, ich hoffe mal ich konnte meine Gedanken so gut wiedergeben, dass die kram ausser mir noch jemand versteht.
ich danke euch...
mfg
Lars