Excess2000: Problem mit Mysql-Abfrage

Hallo,

ich habe 2 Tabellen.

1. Seminare
-----------
SeminarID
Titel
Nummer
Kurztext
Preis
Dozent
Raum
Startdatum
Enddatum
Dauer
DozentenvID

2. Seminarteilnehmer
--------------------
PersonID
SeminarID
Stattgefunden
Raum

Meine Abfrage lautet :

SELECT s.SeminarID, s.Titel, s.Nummer, s.Kurztext, s.Preis, s.Dozent, sem.Raum, s.Startdatum, s.Enddatum, s.Dauer, sem.Stattgefunden FROM seminare s, seminarteilnehmer sem WHERE sem.SeminarID = s.SeminarID AND Titel LIKE 'Golfen%';

Die Tabellen sind so gefüllt :

1. Seminare
-----------
SeminarID | Titel | Nummer | Kurztext | Preis | Dozent | Raum | Startdatum | Enddatum | Dauer | DozentenvID

1 | Golfen fuer dich | 0903 | Hier lernen Sie dsa... | 788 | Berens | S09 | 19.05.2003 | 20.05.2003 | 2| 1
2 | Mathematik fuer... | 0803 | Hier lernen Sie .d.. | 888 | Berens | S09 | 19.05.2003 | 20.05.2003 | 2| 1
3 | SQl fuer dummies | 0703 | Hier lernen Sie ... | 488 | Schmidt | S09 | 19.05.2003 | 20.05.2003 | 2| 1
4 | Tantra | 0603 | Hier lernen Sie ... | 488 | meier | S09 | 19.07.2003 | 20.07.2003 | 2| 1

2. Seminarteilnehmer
---------------------
PersonID | SeminarID | stattgefunden | Raum
0001 | 1 | j | h204
0002 | 1 | n | h205
0003 | 2 | n | xxx8
....

Mein ERgebis der Abfrage sieht dann so aus :
SeminarID | Titel | Nummer | Kurztext | Preis | Dozent | Raum | Startdatum | Enddatum | Dauer | stattgefunden
-------------------------------------------------------------------
1 | Golfen fuer dich | 0903 | Hier lernen Sie dsa... | 788 | Berens | S09 | 19.05.2003 | 20.05.2003 | 2| 1 | j
1 | Golfen fuer dich | 0903 | Hier lernen Sie dsa... | 788 | Berens | S09 | 19.05.2003 | 20.05.2003 | 2| 1 | j
2 | Mathematik fuer... | 0803 | Hier lernen Sie .d.. | 888 | Berens | S09 | 19.05.2003 | 20.05.2003 | 2| 1 j

Das Problem ist das einzelne Seminare öfter vorkommen. Sie werden so oft wie oft sie in der Seminarteilnehmer Tabelle drin sind. ich möchte aner nur die Ergebnisse angeziegt bekommen von den verschiedenen Seminaren.. Wie kann ich die Abfrage so ändern dass im Ergebnis nur die Seminare angeziegt werden, die eine verschiedene SeminarID haben angezeigt werden?

ich habe es danach mit einer Unterabfrage probiert. Die sah so aus :

SELECT s.SeminarID, s.Titel, s.Nummer, s.Kurztext, s.Preis, s.Dozent, sem.Raum, s.Startdatum. s.Enddatum, s.Dauer, sem.Stattgefunden FROM seminare s, seminarteilnehmer sem WHERE sem.Seminaid IN
(
SELECT DISTINCT SeminarID FROM seminarteilnehmer
)

Das sah für mein Auge ganz gut aus, bis ich las das mit mysql keine Unterabfragen möglich sind. Wie kann ich mein Problem lösen? Joins??

Danke

MFG xss

  1. Hi,

    nun ja, ich bin nicht für die performanten Lösungen zuständig, aber bis MySQL 4.1 kommt würde ich einen Workaround machen:
    1. Abfrage: SELECT DISTINCT SeminarID FROM seminarteilnehmer
    $ids = "-1";
    while ($row = mysql_fetch_array($result)) {
     $ids.= ", ".$row["seminarid"];
    }

    2. Abfrage:
    SELECT s.SeminarID, s.Titel, s.Nummer, s.Kurztext, s.Preis, s.Dozent, sem.Raum, s.Startdatum. s.Enddatum, s.Dauer, sem.Stattgefunden FROM seminare s, seminarteilnehmer sem WHERE sem.Seminaid IN
    (
    $ids
    )

    1. Super!!

      das sieht sehr vernünftig aus. Werde ich gleich testen..

      Danke!

      MFg xss

    2. Hallo,

      ich bins noch mal. Habe das gerade getestet aber das läuft nicht so ganz. Also, ich habe die Abfrage jetzt so eingebaut und ein wenig angepasst. Das sieht dann so aus :

      $tmpidsa ist das Array mit den SeminarIDs und hat die Werte :

      -1, 5, 2, 1, 4

      Die Abfrage lautet jetzt :

      SELECT s.SeminarID, s.Titel, s.Nummer, s.Kurztext, s.Preis, s.Dozent, sem.Raum, s.Startdatum, s.Enddatum, s.Dauer, sem.stattgefunden FROM seminare s, seminarteilnehmer sem WHERE sem.SeminarID = s.SeminarID AND Titel LIKE 'Golfen%' AND sem.SeminarID IN ($tmpidsa);

      Leider klappt das nicht. Ich erhalte noch immer eine doppelte Anzeige. Woran kann das liegen?

      Bin echt dankbar! Sitze seid 9:00 Uhr heute morgen an der Abfrage. Aber das hängt nur noch an was kleinem. Hoffe ich :-)

      Danke

      MFG xss

    3. Hallo,

      ich habs!!! Es funktioniert und es war so einfach!!!! Group-by hilft.

      Danke

      MFg xss

  2. Hi,

    1. Seminare

    SeminarID Titel Nummer Kurztext Preis Dozent Raum Startdatum Enddatum Dauer DozentenvID

    1. Seminarteilnehmer

    PersonID SeminarID Stattgefunden Raum

    Warum existiert die Spalte "Raum" in beiden Tabellen?
    Was hat die Information, ob das _Seminar_ stattgefunden hat, in der Teilnehmertabelle verloren?

    Wenn Du "Stattgefunden" zum Seminar gibst (wo es m.E. hingehört) und die Raum-Spalte auch aus der Seminartabelle nimmst, hast Du das Problem nicht.

    Ansonsten: DISTINCT

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
    1. Hallo,

      dank dir erst mal für deine schnelle Antwort. Du hast Recht Raum ist da fehl plaziert aber stattgefunden ist da richtig, weil ein anderes Skript die Info dort braucht.

      Danke!

      MFG xss