MySQL Abfrage über mehrere Tabellen

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

  • MySQL Abfrage über mehrere Tabellen

    Hallo,

    wahrscheinlich eine leichte Frage für die Wissenden unter euch:

    Hintergrund:
    Im Rahmen einer Veranstaltungsevaluation sollen alle Teilnehmer befragt werden.
    Beim Aufruf des Fragebogens möchte ich einem Teilnehmer nun alle Veranstaltungen zur Auswahl geben, die er noch beurteilen kann - also zu denen er noch keinen Fragebogen ausgefüllt hat.

    Tabellenstruktur:
    Veranstaltungen (VID, ...)
    Studierende_Veranstaltungen ( SID, VID, teilgenommen [0,1])
    Studierende (SID, ...)
    Fragebogen (FID, SID, VID, ...)

    Mir will gerade die SQL Abfrage nicht einfallen, um all die Veranstaltungen zu ermitteln, die ein Studierender (Beispiel: SID 113) noch beurteilen kann.


    Vielen Dank für eure Hilfe!

  • #2
    Abgesehen davon, dass dein Post keine Frage zum beantworten enthält: Mit genau dem Topic findest du, wenn du suchst, genau das was du willst. Also: Suchfunktion bemühen!
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      Besten Dank für deine Antwort.

      Meine Frage lautet wie formuliere ich die entsprechende SQL Abfrage.


      Dein Hinweis führt mich selbstverständlich zum Thema Joints und ggf. verschachtelte Abfragen, aber ich komme gerade leider zu keiner Lösung.

      Kommentar


      • #4
        Hallo,

        wie sieht denn deine Abfrage bisher aus und was funktioniert daran nicht so wie es soll?

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Bisher sah mein Lösungsansatz so aus, dass ich nach die Studierenden_Veranstaltung Tabelle durchsucht habe und eine Lösung in PHP implementiert habe.
          Auf dem halben Weg habe ich mich dann daran erinnert, dass die Lösung wahrscheinlich auch mit einer verbesserten Datenbankabfrage funktionieren müsste.

          Bisher ist da aber noch nicht viel bei rausgekommen:

          SELECT *
          FROM Veranstaltungen, Studierende_Veranstaltungen
          WHERE SID = 113 AND NOT IN (...)

          Tja und beim zweiten Teil habe ich gerade ein Brett vor dem Kopf.

          Kommentar


          • #6
            Da fehlen trotzdem immer noch Infos.

            Ich stelle es mir so vor wie nachfolgend beschrieben, obwohl es eigentlich deine Aufgabe ist, das Problem detailliert darzulegen:
            Es sollen also alle Datensätze aus Veranstaltungen ermittelt werden, an denen ein Student auch teilgenommen hat, für die es aber noch keinen Datensatz in Fragebogen gibt.

            Trifft das soweit zu?

            Was ich auch nicht verstehe: Was ist das Feld teilgenommen? Wenn ein Student an einer Veranstaltung nicht teilgenommen hat, sollte es doch für diese Kombination einfach keinen Datensatz in Studierende_Veranstaltungen geben, oder stellt das Feld irgend etwas anderes dar (erfolgreiche Teilnahme, bestandene Prüfung, ausreichende Anwesenheit)?

            Das alles klärst du jetzt bitte lückenlos in deiner nächsten Antwort auf.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Ich versuche nochmal das Problem zu beschreiben:

              Ein Studierende wird zur Bewertung seiner Veranstaltungen eingeladen. Kommt dann durch einen Link zum Fragebogen. Auf dieser Seite sollen in einem Auswahlfeld alle Veranstaltungen erscheinen, die der Studierende noch nicht beurteilt hat (also noch keine Fragebögen existieren).

              Also ich möchte all die Veranstaltungsinformationen auslesen, an denen ein Studierende teilgenommen hat. Der Wert "teilgenommen" ist in der Tat nicht von Nöten. Dies leistet ein einfacher Verbund der beiden Tabellen Veranstaltungen und Studierende_Veranstaltung über die anfragende SID des Evaluationslinks.

              Welche Information mir nun noch fehlt, ist ob davon bereits Veranstaltungen beurteilt worden sind.



              Ich hoffe, dass das Problem nun deutlicher geworden ist. Vielen Dank für die Hilfe!

              Kommentar


              • #8
                Code:
                select *
                from `Studierende_Veranstaltungen` as s2v
                join `Veranstaltungen` as v on v.`VID` = s2v.`VID`
                left join `Fragebogen` as f on f.`SID` = s2v.`SID` and f.`VID` = v.`VID`
                where f.`FID` is null
                    and s2v.`SID` = [i]<StudentId>[/i]
                Zuletzt geändert von AmicaNoctis; 08.02.2010, 16:00.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  Habe dies mal in die phpMyAdmin Oberfläche eingegeben und bekam einen Fehler 1146

                  Code:
                  select *
                  from `Studierende_Veranstaltungen` as s2v
                  join `Veranstaltungen` as v on v.`Veranstaltung_ID` = s2v.`Veranstaltung_ID`
                  left join `Fragebogen` as f on f.`Studierende_ID` = s2v.`Studierende_ID` 
                  and f.`Veranstaltung_ID` = v.`Veranstaltung_ID`
                  where f.`Veranstaltung_ID` is null
                      and s2v.`Studierende_ID` = 2
                  Die Bezeichner sind hier etwas anders und eine Fragebogen ID habe ich nicht mehr, da ein einzelner Fragebogen ja eindeutig durch SID und VID bestimmt ist, da ein Studierende nur einmal zu einer Veranstaltung einen Fragebogen ausfüllen darf.
                  Zuletzt geändert von elf7013; 10.02.2010, 12:37.

                  Kommentar


                  • #10
                    Der Fehler besagt, dass irgendetwas nicht existiert. Überprüfe die Namen der Tabellen und Spalten und poste bitte immer die vollständige Fehlermeldung, weil man sonst nicht viel dazu sagen kann.
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      Die komplette Fehlermeldung aus phpMyAdmin liest sich leider nicht viel besser:

                      "#1146 - "

                      Das ist alles. Da steht lediglich noch ein gelbes Warn-i vor.



                      Edit:
                      Aber besten Dank! Dein Hinweis hat geholfen den Fehler zu finden. Ich hatte tatsächlich eine Tabelle falsch angegeben.

                      Kommentar


                      • #12
                        Dann setz das Statement auf der Kommandozeile oder per PHP ab. PHPMyAdmin ist bei dir entweder kaputt oder du hast eine alte Version, denn eigentlich zeigt es die Fehlermeldungen immer an.
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Kommentar


                        • #13
                          Zitat von AmicaNoctis Beitrag anzeigen
                          Dann setz das Statement auf der Kommandozeile oder per PHP ab. PHPMyAdmin ist bei dir entweder kaputt oder du hast eine alte Version, denn eigentlich zeigt es die Fehlermeldungen immer an.
                          Danke für den Hinweis! Werde mich mal an unseren Server Admin wenden
                          Abfrage läuft auf jeden Fall rund

                          Vielen Dank für deine Hilfe und deine Geduld mit mir.

                          Kommentar

                          Lädt...
                          X