Daniel: Join?!? funktioniert bei Mysql nicht.

Hallo Leute,

also mal ne Frage zu SQL bzw. MySQL. Ich wollte drei Tabellen miteinander verknüpfen, deshalb hab ich das mit Join gemacht/versucht. Aber irgendwie funktioniert der Query nicht. Was mach ich falsch?
Nach meinem Verständnis davon, müsste es funktionieren, aber wie es scheint nicht.

"SELECT kategorien.kat, menues.name, menues.site_id FROM sites INNER JOIN (kategorien INNER JOIN menues ON kategorien.kat_id = menues.kat_id) ON sites.site_id = menues.site_id ORDER BY menues.prio where kategorien.kat = "$section""

Weiß jemand woran das liegt? Jedenfalls danke für eure Hilfen

Daniel

  1. Hm,

    also auf Anhieb ist da kein Fehler für mich drin, kannst du mal irgendwie die MySQL-Super-Fehlermeldung posten, die sagt zwar nicht so viel wie sie sollte, ist aber ein Anfang

    1. Hm,

      also auf Anhieb ist da kein Fehler für mich drin, kannst du mal irgendwie die MySQL-Super-Fehlermeldung posten, die sagt zwar nicht so viel wie sie sollte, ist aber ein Anfang

      Warning:  Supplied argument is not a valid MySQL result resource in /home/daniel/public_html/css/list_menu.php on line 4

      Aber ich denke, dass das nicht wirklich helfen wird.

      1. Nun ja, das hilft vielleicht doch:

        Bei mir kam dieser Fehler meist dann, wenn ich keine Verbindung zur Datenbank hatte. Habe bei PHP schon festgestellt, dass der Close-Befehl offenbar, trotz Parameter Verbindungskennung, ALLE Verbindungen zur entsprechenden Datenbank geschlossen hat. Prüf einfach mal deine Verbindung: Mach an der Stelle mal ein einfaches SELECT FROM WHERE, wenn das klappt, dann suchen wir weiter

        1. Tach Rouven...

          Also mit einer einfachen select-Anweisung funktioniert es einwandfrei.

          Bis denne
          Daniel

          1. Noch zwei Vorschläge:

            1. Mach mal das ORDER BY nach dem WHERE
            2. Nimm mal die Klammerung weg:
            tab1
            INNER JOIN
            tab2 ON tab1.x=tab2.X
            INNER JOIN
            tab3 ON tab2.y=tab3.y

            1. Hi Rouven,

              du bist ein Genie!!!

              Es lag wirklich nur an dem Order by. Das hab ich nach hinten gestellt und es hat funktioniert. Woran liegt denn so etwas?

              Danke Danke Danke Danke Danke

              Daniel

              1. Hm,

                lass es mich vorsichtig ausdrücken und zugleich meine Verwunderung zum Ausdruck bringen:
                1. Ich mag Microsoft und Microsoft-Dev-Tools, aber sie neigen (siehe IE) nicht zu sehr strenger Syntax-Kontrolle, d.h. dass auch eine leicht "persönlichen standards folgende" ( ;-) ) Abfrage unter Access laufen mag, obwohl sie nicht dem SQL-Standard entspricht. Ich meine jedenfalls, dass ORDER immer am Ende stehen muss

                2. Gleichzeitig wundert mich, dass dieses MySQL, dass sich noch nicht mal Gedanken über den Vergleich von Integer-Feld und WHERE feld = '$(var)' macht, obwohl die Quotes eigentlich einen String andeuten, und das weiterhin keinen Unterscheid bei Groß-Kleinschreibung macht (kann man das einstellen??) sich bei der Sache dann so anstellt.
                Man lernt nie aus !

                  1. Ich mag Microsoft und Microsoft-Dev-Tools, aber sie neigen (siehe IE) nicht zu sehr strenger Syntax-Kontrolle, d.h. dass auch eine leicht "persönlichen standards folgende" ( ;-) ) Abfrage unter Access laufen mag, obwohl sie nicht dem SQL-Standard entspricht. Ich meine jedenfalls, dass ORDER immer am Ende stehen muss

                  Wobei das ist man ja vom MS gewohnt.

                  1. Gleichzeitig wundert mich, dass dieses MySQL, dass sich noch nicht mal Gedanken über den Vergleich von Integer-Feld und WHERE feld = '$(var)' macht, obwohl die Quotes eigentlich einen String andeuten, und das weiterhin keinen Unterscheid bei Groß-Kleinschreibung macht (kann man das einstellen??) sich bei der Sache dann so anstellt.

                  Ich hab keine Ahnung was du meinst. Ich verstehe zwar der Groß- und Kleinschreibung (kann dir auch keine Antwort drauf geben), aber den ersten teil nicht. Was meinst du jetzt, den Unterschied zwischen ' und ". Ist das nicht das gleiche?

                  1. Bezeichnen wir es als "philosophische Frage". Es gibt hier irgendwo einen Thread der ausdiskutiert, dass die Datenbank sowieso entscheidet als welchen Datentyp sie die Auswertung vornimmt, es ihr also egal ist, ob du jetzt als Vergleichswert für eine Zahl einen String angibst. Nur für mich ist halt die "saubere Logik": Das ist ein Zahl-Feld, also vergleichen wir nicht mit einem String:
                    WHERE textfeld = '$(textvariable)'

                    WHERE zahlfeld = $(zahlvariable)

                    1. Ja also das mit der Zahlvariable hätte ich genause gemacht, allerdings hätte ich die Textvariable mit " gemacht... wobei wenn es eh keine Rolle spielt.

  2. Hallo,

    "SELECT kategorien.kat, menues.name, menues.site_id FROM sites INNER JOIN (kategorien INNER
    JOIN menues ON kategorien.kat_id = menues.kat_id) ON sites.site_id = menues.site_id ORDER BY
    menues.prio where kategorien.kat = "$section""

    MySQL kann (noch?) keine Sub-Selects. Ich bin mir nichtmal sicher, ob die Syntax ueberhaupt so
    richtig ist... Was moechtest du denn erreichen?

    Gruesse,
     CK

    1. Hi!

      Also ich hab bisher mit ASP und Access-Datenbank gearbeitet und da wäre das Statement korrekt.
      Das Problem ist, dass ich 3 verschiedene Tabellen hab, die über verschiedene Dinge verknüpft sind. Man kann zwar mit zwei und mehr Verknüpfungen das gleiche bewirken, also alle Tabellen miteinander zu verknüpfen, aber irgendwie will das nicht. Sicher ist es vielleicht einfacher das auseinander zu ziehen, aber ich hätte gerne alles etwas kompakter und übersichtlicher, wenn ich das jetzt mit der Join-Verknüpfung einbaue, dann kann ich einfacher verknüpfte Daten aus der herausholen.

      Bis denne
      Daniel

      1. Moin,

        Hi!

        Also ich hab bisher mit ASP und Access-Datenbank gearbeitet und da wäre das Statement korrekt.

        Sieh'ste! ASP und Access ist auch ne ganz andere Ecke, da greifen andere SQL-Implementierungen und vorallem auch andere Treiber(Bibos).
        Es ist genau das selbe Problem, wie wenn man von MS SQL Server nach Oracle umstellen würde.... nicht alles funktioniert

        Beides (Access & MySQL) sind keine vernünftigen Datenbanksysteme, wobei man MySQL zu gute halten muß, dass es gratis ist und performanter. :-) Dafür fehlen aber eben wichtige Features.

        Gruß, so long, Frank

        1. Sieh'ste! ASP und Access ist auch ne ganz andere Ecke, da greifen andere SQL-Implementierungen und vorallem auch andere Treiber(Bibos).

          Ja ich seh das auch schon irgendwo ein, wobei der Fehler lag ja jetzt nur bei der Reihenfolge von order und where. Wobei das ja nicht unbedingt ein Problem ist. Bisher bin ich nämlich mit meinem wenigen Kenntnissen gut zurechtgekommen.

          1. Sieh'ste! ASP und Access ist auch ne ganz andere Ecke, da greifen andere SQL-Implementierungen und vorallem auch andere Treiber(Bibos).

            Ja ich seh das auch schon irgendwo ein, wobei der Fehler lag ja jetzt nur bei der Reihenfolge von order und where. Wobei das ja nicht unbedingt ein Problem ist. Bisher bin ich nämlich mit meinem wenigen Kenntnissen gut zurechtgekommen.

            Hi,

            wie meinst du "order und where"

            SELECT a, b, c ORDER by a ASC FROM z WHERE c = y

            wußte bislang gar nicht, dass Access so tolerant ist, 6 setzen, Toleranz wird nicht toleriert!

            Aber eine falsche SQL-Syntax ist schon ein "Problem".

            Z.b. solche Sachen wie SELECT TOP 25 * FROM table1 ORDER BY datumX DESC  gehen auch nur in T-SQL.

            Ich habe am Wochenende einen MS SQL Server aufgesetzt, einen Oracle8i und jeweils eine ASP-Applikation von Access dahin migriert.
            das war schweißtreibend genug :-)

            Gruß, Frank

            1. Hi!

              wie meinst du "order und where"

              Das hat nicht funktioniert: "SELECT kategorien.kat, menues.name, menues.site_id FROM sites INNER JOIN (kategorien INNER JOIN menues ON kategorien.kat_id = menues.kat_id) ON sites.site_id = menues.site_id ORDER BY menues.prio where kategorien.kat = "$section""

              Das order by nach hinten:... "SELECT kategorien.kat, menues.name, menues.site_id FROM sites INNER JOIN (kategorien INNER JOIN menues ON kategorien.kat_id = menues.kat_id) ON sites.site_id = menues.site_id where kategorien.kat = "$section" ORDER BY menues.prio" .... und es funktioniert

              SELECT a, b, c ORDER by a ASC FROM z WHERE c = y

              wußte bislang gar nicht, dass Access so tolerant ist, 6 setzen, Toleranz wird nicht toleriert!

              Aber eine falsche SQL-Syntax ist schon ein "Problem".

              Tja also ich hatte immer gedacht, dass man nicht auf die Reihenfolge achten müsste (zumindest nicht bei order und where).

              Z.b. solche Sachen wie SELECT TOP 25 * FROM table1 ORDER BY datumX DESC  gehen auch nur in T-SQL.

              Ich habe am Wochenende einen MS SQL Server aufgesetzt, einen Oracle8i und jeweils eine ASP-Applikation von Access dahin migriert.
              das war schweißtreibend genug :-)

              Das kann ich mir vorstellen ;)

              Daniel

  3. Hallo,

    also mal ne Frage zu SQL bzw. MySQL. Ich wollte drei Tabellen miteinander verknüpfen, deshalb hab ich das mit Join gemacht/versucht. Aber irgendwie funktioniert der Query nicht. Was mach ich falsch?
    Nach meinem Verständnis davon, müsste es funktionieren, aber wie es scheint nicht.

    "SELECT kategorien.kat, menues.name, menues.site_id FROM sites INNER JOIN (kategorien INNER JOIN menues ON kategorien.kat_id = menues.kat_id) ON sites.site_id = menues.site_id ORDER BY menues.prio where kategorien.kat = "$section""

    Schuss ins Blaue:
    "SELECT kategorien.kat, menues.name, menues.site_id FROM (kategorien INNER JOIN menues ON kategorien.kat_id = menues.kat_id) INNER JOIN sites ON sites.site_id = menues.site_id ORDER BY menues.prio WHERE kategorien.kat = "$section""

    Siehe:
    http://www.mysql.com/doc/en/JOIN.html

    Weiß jemand woran das liegt? Jedenfalls danke für eure Hilfen

    War's das? Würde mich echt interessieren.

    Gruß

    Axel

    1. Schuss ins Blaue:
      "SELECT kategorien.kat, menues.name, menues.site_id FROM (kategorien INNER JOIN menues ON kategorien.kat_id = menues.kat_id) INNER JOIN sites ON sites.site_id = menues.site_id ORDER BY menues.prio WHERE kategorien.kat = "$section""

      Siehe:
      http://www.mysql.com/doc/en/JOIN.html

      Weiß jemand woran das liegt? Jedenfalls danke für eure Hilfen
      War's das? Würde mich echt interessieren.

      Hi Axel... leider war's das nicht...

      Ich werd mal schauen, ob es da noch etwas bei der MySQl-Seite gibt... danke