Problem bei JOIN Abfrage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem bei JOIN Abfrage

    Folgende Abfrage liefert keine Ergebnisse

    mysql_query("select * from Fragebogen_Veranstaltung LEFT JOIN Veranstaltung where Fragebogen_Veranstaltung.Veranstaltung_ID = Veranstaltung.Veranstaltung_ID AND Veranstaltung.Kurs_ID = '$Kurs'");

    An dieser Stelle brauche ich ausnahmsweise nicht das Kartesiche Produkt beider Tabellen sondern ausschliesslich die Verknüpfung der Tabelle Fragebogen_Veranstaltung mit der Tabelle Veranstaltung.

    Wo mache ich einen Fehler?

  • #2
    Problem im Syntax gefunden:

    mysql_query("select * from Fragebogen_Veranstaltung LEFT JOIN Veranstaltung USING (Veranstaltung_ID) where Veranstaltung.Kurs_ID = '$Kurs'");


    Leider scheint der Left Join nicht richtig zu sein...

    Kommentar


    • #3
      also so ganz verstehe ich dein Problem nicht aber wenn du nur die Datensätze brauchst, die eine Verknüpfung mit der Tabelle Veranstaltung haben, so nutze ein INNER JOIN..... falls das ist, was du willst
      signed oder unsigned... das ist hier die Frage

      Kommentar


      • #4
        Das Problem ist von mir auch schlecht beschrieben...

        Also ich habe Fragebogen zu Veranstaltungen erhoben und diese in der Tabelle Fragebogen_Veranstaltung abgelegt.

        Fragebogen_Veranstaltung
        {
        Studierende_ID (primär)
        Veranstaltung_ID (primär)
        ...
        }

        Da es mehrere Veranstaltungen gibt, sind entsprechende Werte in der Tabelle Veranstaltung abgelegt:

        Veranstaltung
        {
        Veranstaltung_ID (primär)
        Prof_ID (primär)
        Kurs_ID
        ...
        }

        Bisher war es so, dass Veranstaltungen nur von einem Prof gehalten wurden, dieses wurde in einem Kurs mehrere Veranstaltungen aufgehoben.

        Insgesamt wurden diese Veranstaltungen von 54 Personen evaluiert.

        Durch die alte Abfrage:
        $result = mysql_query("select * from Fragebogen_Veranstaltung INNER JOIN Veranstaltung USING (Veranstaltung_ID) where Veranstaltung.Kurs_ID = '$Kurs'");

        erhalte ich aber 108gezählte Ergebnisse (was auch dem JOIN entspricht).

        Eigentlich brauche ich aber jeden Fragebogen nur einmal egal ob es nun von Prof A oder B gehalten wurde.



        Mmmh ich glaube die Beschreibung ist noch nicht viel besser

        Kommentar


        • #5
          GROUP BY Veranstaltung.Kurs_ID
          müsste helfen

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            Eine Vernünftige Datenbankstruktur würde dein Problem Lösen.

            Du musst einfach die Professor-id aus der Tabelle Veranstaltung rausnehmen. So hast du eine Veranstaltungs-id auch nur genau ein mal in der Tabelle Veranstaltung stehen.

            Dann machst du eine Kreuztabelle professor_veranstaltung, wo nur 2 Primarykeys, professor_id und veranstaltung_id drin stehen.

            So steht die Veranstaltung nur noch einmal in der Tabelle und du erhältst die Datensätze die du brauchst.

            Außerdem könntest du die Studentennamen mit einem SELECT DISTINCT nur einmalig herausfinden, wobei die Datenbankstruktur dann immer noch unsauber ist.
            signed oder unsigned... das ist hier die Frage

            Kommentar


            • #7
              SELECT * FROM mit einer Tabelle ist schon schlecht mit JOINS wirds zur Katastrophe. Ausserdem erschwert es die Hilfestellung, wweil wir dann die Tabellenstruktur nicht kennen.
              Aber wenn du uns beschreibst, was für Daten du haben willst und wie deine Tabellen sonst noch aussehen , dann können wir dir vielleicht weiter helfen.
              Gruss
              H2O

              Kommentar


              • #8
                Ich glaube folgende Beschreibung trifft es:

                Die Lösung des Problems besteht aus zwei Schritten:

                1. Ich brauche alle Veranstaltung_ID (und zwar nur einmal!) der Tabelle Veranstaltung abhängig von der Kurs_ID:
                SELECT DISTINCT * FROM Veranstaltung_ID WHERE Kurs_ID=22;

                2. Danach brauche ich alle ausgefüllten Fragebögen zu den gerade ermittelten Veranstaltung_ID.

                Also die Lösung meines Problems wäre ein JOIN auf dem DISTINCT Ergebnis
                der Veranstaltung Tabelle.



                Leider kenne ich mich mit verschachtelten Anfragen nicht und weiss nicht ob dies zum Ziel führt?

                Kommentar


                • #9
                  Dann lesen: http://www.php-resource.de/forum/sho...threadid=28292 und entsprechend anpassen.

                  Kommentar


                  • #10
                    Original geschrieben von asp2php
                    Dann lesen: http://www.php-resource.de/forum/sho...threadid=28292 und entsprechend anpassen.
                    Dies las ich bereits, bin ich aber nicht mit zurecht gekommen.

                    So nachdem ich nicht weiterkam, habe ich stumpf folgendes probiert:
                    mysql_query("select distinct Fragebogen_Veranstaltung.* from Fragebogen_Veranstaltung INNER JOIN Veranstaltung USING (Veranstaltung_ID) where Veranstaltung.Kurs_ID = '$Kurs'");

                    und dies führt zum gewünschten Ergebnis.


                    Vielen Dank für alle Hinweise.
                    Zuletzt geändert von elf7013; 13.03.2008, 10:48.

                    Kommentar

                    Lädt...
                    X