backbone: /mysql: abfrage von 3 u. mehr tabellen auf einen bestim. wert

moin folks,

sorry das ich das thema zum dritten mal anfange aber auf den letzten thread konnt ich nicht mehr antworten da er schon im archiv ist / war.

also es geht immer noch um das problem:

ich hab 5 tabellen und aus allen will ich mit einer abfrage die datensätze abfragen wo die id=5 ist. leider hab ich mich in mysql noch nicht eingefuchst das ich das irgendwie hinbekomme. deswegen wollte ich fragen ob mir jemand helfen kann indem er mir an einenm bsp. veranschaulicht wie das geht.

thx for help,

tschau

  1. abend,

    ich kenne deinen thread zwar nicht, aber ich gehe mal davon aus,
    dass du übliche joins meinst. gute praxisbeispiele und ansonsten
    auch eine gute erklärung findest du unter http://www.infos24.de/mysqle/handbuch/12_mysql_joins.htm#4

    HIH

    mfg,
    (tanz das)
    Z.N.S.

    --
    <img src="http://www.dmp-web.de/comunicout/neubauten.gif" border="0" alt="">
    1. aloha nochmal,

      danke für den link. habe mir das mal angeschaut und folgende sache zusammengebastelt:

      "SELECT * FROM devices,hardware,network,software LEFT JOIN devicesID on (devices.mid = hardware.mid) LEFT JOIN hardwareID on (hardware.mid = network.mid) LEFT JOIN networkID on (network.mid = software.mid) LEFT JOIN softwareID on (software.mid = hardware.mid) WHERE hardware.mid='$_GET[mid]'";

      nun funktionierts aber nicht wirklich. ich bin noch nicht ganz dahinter gestiegen warum deswegen meine frage: könnte das mal bitte jemand von euch debugen?

      thx

      1. abend,

        SELECT   devices.*, hardware.*, network.*, software.*
        FROM   devices
        LEFT JOIN  hardware  ON  devices.hardwareID  =  hardware.mid
        LEFT JOIN  network   ON  devices.networkID  =  network.mid
        LEFT JOIN  software  ON  devices.softwareID  =  software.mid
        WHERE   hardware.mid = '$_GET[mid]'";


        allerdings bin ich mir nicht sicher, ob das in der ersten reihe korrekt
        gemacht wird. wenn nicht, dann halt alle spalten seperat auflisten (mit
        dem jeweiligen tabellennamen und anschließendem punkt (.) davor). dazu
        muss deine device-table alle drei fremdschlüssel aufweisen, damit die
        sql-anweisung korrekt ist...

        HIH

        mfg,
        (tanz das)
        Z.N.S.

        --
        <img src="http://www.dmp-web.de/comunicout/neubauten.gif" border="0" alt="">
        1. okay,

          SELECT   devices.*, hardware.*, network.*, software.*
          FROM   devices
          LEFT JOIN  hardware  ON  devices.hardwareID  =  hardware.mid
          LEFT JOIN  network   ON  devices.networkID  =  network.mid
          LEFT JOIN  software  ON  devices.softwareID  =  software.mid
          WHERE   hardware.mid = '$_GET[mid]'";

          das schaut ja schonmal gut aus. jetzt noch ne frage zum verständnis:

          also, ich wollte alle daten aus den tabellen hardware,devices,network und software abfragen bei denen die id=$_GET[mid] ist.

          nun verstehe ich das hier nicht ganz:

          devices.hardwareID  =  hardware.mid

          in der tabelle devices gibts bei mir keine hardwareID. welche bedeutung hat der teil des string? (in-der-mysql-doku-keine-richtige hilfe-gefunden-hat)

          tschau und thx

        2. moin nochmal...

          habe mir mal die obrige syntax zur brust genommen und so umgeändert wie ich denke das sie richtig ist:

          "SELECT   devices.*, hardware.*, network.*, software.*
              FROM   devices
              LEFT JOIN  hardware  ON  hardware.mid  =  network.mid
              LEFT JOIN  network   ON  network.mid  =  software.mid
              LEFT JOIN  software  ON  software.mid  =  devices.mid
              LEFT JOIN  devices  ON  devices.mid  =  hardware.mid
              WHERE hardware.mid='$_GET[mid]'";

          mag mir mal jemand den fehler aufzeigen der hier besteht?

          thx for help.

          tschau

          1. Hi Backbone

            "SELECT   devices.*, hardware.*, network.*, software.*
                FROM   devices
                LEFT JOIN  hardware  ON  hardware.mid  =  network.mid
                LEFT JOIN  network   ON  network.mid  =  software.mid
                LEFT JOIN  software  ON  software.mid  =  devices.mid
                LEFT JOIN  devices  ON  devices.mid  =  hardware.mid
                WHERE hardware.mid='$_GET[mid]'";

            mag mir mal jemand den fehler aufzeigen der hier besteht?

            Ehm, du sollst die Tabellen über die jeweils zusammengehörigen IDs verknüpfen, sprich Fremdschlüssel mit Primärschlüssel.

            Des weiteren ist hardware.mid wahrscheinlich kein String.

            Des weiteren ist es lebensgefährlich ein Parameter ohne Prüfung und ohne Escapen direkt an eine Query zu verfüttern.

            Gruss Daniela