phpbar.de logo

Mailinglisten-Archive

Mysql Abfrage über mehrere Tabellen

Mysql Abfrage über mehrere Tabellen

Sebastian Mendel lists at sebastianmendel.de
Die Jul 13 16:55:08 CEST 2004


Michael Kinne schrieb:

> Also die Tabelle sieht dann nach Einträgen für 2 Dozenten, Kursen und
> Teilnehmer so aus
> 
> vhs    dozent    kurs    teilnehmer
> 2            2        1            1                Neuer Dozent
> 2            3        1            1                Neuer Dozent
> 2            2        2            1                Neuer Kurs
> 2            3        3            1                Neuer Kurs
> 2            1        1            2                Neuer Teilnehmer
> 2            1        1            3                Neuer Teilnehmer
> 2            2        2            2                Teilnehmer an Kurs
> angemeldet
> 2            3        3            3                Teilnehmer an Kurs
> angemeldet

entspricht aber nicht der Normalform ... ;-) aber weitere Normalisierung 
wäre wohl nur in der Thorie sinnvoll, in der Praxis passt da wohl schon 
glaub ich


> Jetzt habe ich folgendes Problem , wenn ich einen neuen Teilnehmer an einem
> bestehenden Kurs anmelden möchte
> soll er mir nur die anzeigen die noch nicht in diesem Kurs angemeldet sind
> ( z.Bsp Teilnehmer 3 in Kurs 2 )
> 
> Versuche das mit folgender Abfrage, klappt aber nicht
> 
> SELECT teilnehmer.teilnehmer_id, teilnehmer.teilnehmer_name,
> teilnehmer.teilnehmer_vorname, teilnehmer.teilnehmer_strasse,
> teilnehmer.teilnehmer_hausnummer, teilnehmer.teilnehmer_plz,
> teilnehmer.teilnehmer_ort
> FROM bildungseinrichtung, dozenten, kurse, teilnehmer,
> vhs_dozent_kurs_teilnehmer_rel
> WHERE bildungseinrichtung.bildungseinrichtung_id =
> vhs_dozent_kurs_teilnehmer_rel.bildungseinrichtung_id
> AND bildungseinrichtung.bildungseinrichtung_id = '$iEinrichtungs_id'
> AND dozenten.dozenten_id = vhs_dozent_kurs_teilnehmer_rel.dozenten_id
> AND dozenten.dozenten_id = '1'
> AND kurse.kurs_id = vhs_dozent_kurs_teilnehmer_rel.kurs_id
> AND kurse.kurs_id = '1'
> AND teilnehmer.teilnehmer_id = vhs_dozent_kurs_teilnehmer_rel.teilnehmer_id
> ORDER BY teilnehmer.teilnehmer_name, teilnehmer.teilnehmer_vorname,
> teilnehmer.teilnehmer_strasse ASC
> 
> was ist falsch daran?

mhm, ... zur Formatierung sag ich jetzt nichts ...

also:
Teilnehmer die noch nicht bei dem Kurs sind aber in der rel-tabelle


     SELECT teilnehmer.*
            MAX(kurs_id) AS `kurs_id_max`
       FROM vhs_dozent_kurs_teilnehmer_rel AS `rel`
  LEFT JOIN teilnehmer
      USING (teilnehmer_id)
      WHERE `rel`.bildungseinrichtung_id = '$iEinrichtungs_id'
        AND `kurs_id` IN ( 1, '$kurs_id')
   GROUP BY `teilnehmer`.`teilnehmer_id`
     HAVING `kurs_id_max` = 1
   ORDER BY teilnehmer.teilnehmer_name,
            teilnehmer.teilnehmer_vorname,
            teilnehmer.teilnehmer_strasse

ich bekomme nur etwas Zweifel wenn ich die Längen unserer beiden 
Abfragen vergleiche ... deine Abfrage ist wirklich ein Monster ;-)


p.s. das 'ASC' beim ORDER BY wirkt sich nur auf das letzte aus, du musst 
das hinter jedes Feld setzen wenn du die Sortiereihenfolge ändern 
willst, abgesehen davon das ASC eh default ist:

   ORDER BY teilnehmer.teilnehmer_name ASC,
            teilnehmer.teilnehmer_vorname ASC,
            teilnehmer.teilnehmer_strasse ASC


-- 
Sebastian Mendel

www.sebastianmendel.de www.warzonez.de www.tekkno4u.de www.nofetish.com
www.sf.net/projects/phpdatetime        www.sf.net/projects/phptimesheet

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive