Probleme mit MySQL-Abfrage über 3 Tabellen

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

  • Probleme mit MySQL-Abfrage über 3 Tabellen

    Hallo,

    ich habe eine Applikation mit mehreren Tabellen. Jetzt möchte ich eine Abfrage mit Bezug auf 3 Tabellen stellen ( Tab Lehrgang, Tab Ort, Tab Teilnehmer)

    so etwa:

    "select count (t.id_TN), t.bez, l.bez, l.raum, o.raum, o.tnZahl from teilnehmer t, lehrgang l, ort o where t.bez = l.bez and l.raum = o.raum"

    if count (t.id_TN) <= o.tnZahl {
    echo "Sie können dem Lehrgang noch einen Teilnehmer hinzufügen."
    echo "<a href = hinzufügen.php>Hinzufügen</a>"}
    else
    echo "Der Lehrgang ist bereits ausgebucht."

    Also ich möchte der Tab TN einen TN hinzufügen, dazu überprüfe ich erst, ob die angemeldeten TN ( count(t.id_TN) des Lehrgangs mit der Bezeichnung bez ("Vergleich t.bez mit l.bez) die TNZahl (o.tnZahl) nicht überschreitet ( an die richtige TNZahl, o.tnZahl, komme ich über l.raum = o.raum)

    Hoffe ich habe mich verständlich ausgedrückt, würde mich sehr freuen, wenn mir jmd helfen könnte

  • #2
    Und was ist jetzt das Problem?

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

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

    Kommentar


    • #3
      Die Abfrage funktioniert so wie sie da steht nicht. Ich bekomme eine falsche Anzahl an zutreffenden Datensätzen. "kartesisches Produkt". Wie formuliere ich die Abfrage richtig?
      Wieso erhalte ich bei der aktuellen Abfrage die falsche Anzahl zutreffender Datensätze und wieso bei diesen nicht die Werte sondern nur die Spaltennamen?
      Wie formuliere ich die anschließende if-Verzweigung richtig, so dass ich mit den ausgelesenen Daten arbeiten kann?

      Kommentar


      • #4
        Du hast die Abfrage falsch angefangen. Du willst nicht alle Teilnehmer haben, sondern du willst alle Lehrgänge haben. Von den Lehrgängen aus kannst du zu den Teilnehmern joinen, das gruppieren (group by) und zwar die Teilnehmer nach den Lehrgängen und zählen (count), und auf den Ort joinen um so die benötigten Spalten zu erhalten.

        Dein Query sollte eigentlich das richtige Ergebnis liefern (sofern du noch ein group by dazu setzt), nur vom Verständnis her hast du falsch angefangen ^^

        Danach halt das übliche mit mysql_fetch_* und dann das if, wie genau das Auswerten der Rückgabe von mysql_query funktioniert lässt sich in Tutorials nachlesen.

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

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

        Kommentar


        • #5
          ok, das werd ich später nochmal versuchen, allerdings mit der Auswertung der Abfrage bin ich noch nicht so ganz im Reinen: mysql-fetch..klar...aber dann...und wie genau....ausgeben lassen ok, aber damit rechnen...da hängts noch etwas...

          ist ein spezielles tutorial bekannt, dass sich mit diesem Problem befasst??

          schonmal danke für deine schnelle Hilfe

          Kommentar


          • #6
            Zum Beispiel nimmst du mysql_fetch_assoc, das gibt ein assoziatives Array mit den Spaltennamen als Key und dem Inhalt als Value zurück. Such dir aus, welche Funktion dir am praktischten erscheint.

            Ein var_dump auf das Ergebnis zeigt dir was rauskommt.
            ich glaube

            Kommentar


            • #7
              Hi,

              hab jetzt mal unten stehendes Konstrukt gebildet, bekomme dabei aber diese Fehlermeldung:

              "Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in x:\xxx\test.php on line 15
              (,,)
              NULL
              Warning: mysqli_free_result() expects parameter 1 to be mysqli_result, boolean given in x:\xxx\test.php on line 23"

              Code:

              1 <?php
              2 error_reporting (E_ALL);
              3 $link = mysqli_connect('xxx', 'xxx', 'xxx', 'xxx');
              4 /* check connection */
              5 if (mysqli_connect_errno()) {
              6 printf("Connect failed: %s\n", mysqli_connect_error());
              7 exit();
              8 }
              9 //$query = "select l.bez, l.raum, t.sem, count (t.id_St), o.rName, o.tnZahl from lgang l inner join steiln t on l.bez = t.sem group by t.id_tn inner join sort o on l.raum = o.rName";
              10 $query = "select t.id_St, l.bez, l.raum, t.sem, count (t.id_St), o.rName, o.tnZahl from lgang l, steiln t, sort o where l.bez =
              t.sem and l.raum = o.rName group by t.id_St";
              11 //$query = "select * from lgang";
              12 $result = mysqli_query($link, $query);
              13 /* fetch associative array */
              14 /* associative array */
              15 $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
              16 //print_r ($row);
              17 //var_dump ($mysqli);
              18 //printf ("%s (%s,%s,%s,%s,%s)\n", $row["t.id_St"],
              $row["l.bez"], $row["l.raum"], $row["t.sem"], $row["o.rName"], $row["o.tnZahl"]);
              19 printf ("%s (%s,%s,%s)\n",
              $row["t.id_St"],$row["l.bez"],$row["l.raum"],$row["o.tnZahl"]);
              20 echo "<br>";
              21 var_dump ($row);
              22 //* free result set */
              23 mysqli_free_result($result);
              24
              25 /* close connection */
              26 mysqli_close($link);
              27 ?>

              Kann mir da jmd weiterhelfen???

              Kommentar


              • #8
                Fehler ausgeben lassen oder Query in pma ausprobieren

                abgesehen davon bitte die php-Tags benutzen beim Posten von Code

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

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

                Kommentar


                • #9
                  dann schau doch mal was
                  PHP-Code:
                  $result mysqli_query($link$query) or die (mysqli_error()); 
                  ausgibt.

                  gruß
                  peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    mit der Fehlermeldung kann ich jetzt nicht unbedingt was anfangen:

                    PHP-Code:
                    Warningmysqli_error() expects exactly 1 parameter0 given in 
                    ...hatte sie auch schon im letzten Posting erwähnt..."duckunweg"


                    ich vermute dass die Abfrage nicht hinhaut, ich hab versucht sie so auszuführen wie ihr mir erklärt habt...oder seht ihr da einen Fehler???

                    bin ratlos...

                    Kommentar


                    • #11
                      also im pma führt er die Abfrage ohne Fehlermeldung aus:

                      PHP-Code:
                      $sql 'select t . id_St , l . bez , l . raum , t . sem ,
                       count( t . id_St ) , o . rName , o . tnZahl from lgang l ,
                       steiln t , sort o where l . bez = t . sem and l . raum = 
                      o . rName group by t . id_St LIMIT 0, 30 '

                      EDIT:
                      Den Code brichst du in Zukunft bitte selber um!


                      id_St bez raum sem count( t . id_St ) rName tnZahl
                      1 Linux E40 Linux 2 E40 15
                      2 Linux E40 Linux 2 E40 15
                      3 Linux E40 Linux 2 E40 15
                      4 Linux E40 Linux 2 E40 15
                      5 Linux E40 Linux 2 E40 15
                      6 Windows Baden Windows 1 Baden 20
                      7 Windows Baden Windows 1 Baden 20
                      16 Photoshop Zimmer Photoshop 1 Zimmer 12

                      Kann das mit "MyIsam" zusammenhängen???vll "InnoDB"????
                      Zuletzt geändert von wahsaga; 18.04.2007, 21:04.

                      Kommentar


                      • #12
                        1. code umbrechen, kein mensch scrollt gerne horizontal
                        2. setze hinter jede(!) abfrage mal ein or die (mysqli_error())

                        gruß
                        peter
                        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                        Meine Seite

                        Kommentar


                        • #13
                          Original geschrieben von polizey
                          Kann das mit "MyIsam" zusammenhängen???vll "InnoDB"????
                          Ich hab keine Ahnung also einfach mal ein paar Begriffe in den Raum werfen? Oo
                          Natürlich könnte es, aber ein Fehler im DBMS dürfte im Vergleich zu einem Fehler in deinem Code, eher unwahrscheinlich sein ^^,


                          probier mal so
                          PHP-Code:
                          $result mysqli_query($link$query) or die (mysqli_error($link)); 

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

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

                          Kommentar


                          • #14
                            ja, ne is schon ok, das hängt nicht mit "MyIsam" zusammen. Wollt auch nicht klugscheißen, is mir einfach eben quer durch den Kopp geschossen. Hab da kein Plan von.

                            or die (mysqli_error());-> habe ich bereits probiert, die Fehlermeldung bleibt

                            aber mir ist was anderes aufgefallen:

                            PHP-Code:
                            printf ("%i (%s, %s, %s,%i,%s,%i)\n"$row["t.id_St"],$row["l.bez"],$row["l.raum"], 
                            PHP-Code:
                            $row["t.sem"], $row["count (t.id_St)"], $row["o.rName"], $row["o.tnZahl"]); 
                            ich lese hier nämlich nur string-Werte aus, aber id_St, tnZahl sind ja Integer-Werte

                            Wie geh ich jetzt mit denen um? kein %s, sondern ??? und kein $row["id_St"] sondern ???

                            das könnte es doch sein, oder??
                            Zuletzt geändert von polizey; 19.04.2007, 07:42.

                            Kommentar


                            • #15
                              Breche endlich den Code um.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X