Announcement

Collapse
No announcement yet.

mehrere Einträge in einem Durchlauf auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • mehrere Einträge in einem Durchlauf auslesen

    erstmal ein Hallo an alle hier!
    Hab mich gerade registriert, da ich hier eine Antwort auf mein Problem erhoffe.

    Es geht also darum, dass ich 2 Tabellen habe. Die erste Tabelle hat (z.b) zwei Spalten: id und value. Womit die Einträge dann folgendermaßen aussehen würden:

    [1 | Wert 1]
    [2 | Wert 2]
    ....


    Die andere Tabelle (im Prinzip können es auch mehr sein) beziehen sich auf die erste Tabelle. Dabei sehen sie in etwa so aus (schematisch):

    [UINT | UINT | UINT | ....] (Die Anzahl der Spalten ist egal)

    ein Eintrag aus der zweiten Tabelle sieht dann z.b. so aus
    [22 | 3 | 39 | 2203 | ....]

    Dabei beziehen sich die UINT-Werte auf die erste Tabelle (genauer: auf die IDs). Ich will nun die zweite Tabelle haben, jedoch nicht mit den UINT-Werten, sondern mit den Werten aus der ersten Tabelle.
    Ich hoffe das Prinzip ist klar, das ich mit mySQL umsetzen will.

    Bis jetzt habe ich es geschafft nur einen Wert zu "ersetzen", nämlich nach folgendem Schema.
    Code:
    SELECT
    t1.value AS Wert
    FROM
    <value-table> AS t1
    <UINT-table> AS t2
    WHERE
    t1.id = t2.<spaltenname>
    So kann ich mich aber immer nur auf eine Spalte beziehen. Irgendwie muss es doch bestimmt gehen sich auch auf mehrere Spalten beziehen zu können.

    Wenn jemand den Namen dieses Prinzips kennt (aber gerade nicht die Lösung), so schreibt mir auf jeden Fall zurück. So weiß ich dann zumindest nach welchem Begriff ich suchen kann.

    mfg dundanox

  • #2
    Hallo dundanox,

    dein Code-Beispiel ist ja schon ein impliziter JOIN, also der richtige Ansatz. Es gibt auch keine Beschränckung die das sagt das eine Tabelle nur einmal gejoint werden darf - also benutz sie einfach mehrfach .
    Das ganze als expliziter JOIN formuliert sieht dann so aus:
    [highlight=sql]
    SELECT t1_1.value Wert1, t1_2.value Wert2, t1_3.value Wert3,...
    FROM <UINT-table> t2
    inner join <value-table> t1_1 on t1_1.id = t2.<UINT1>
    inner join <value-table> t1_2 on t1_2.id = t2.<UINT2>
    inner join <value-table> t1_3 on t1_3.id = t2.<UINT3>
    [/highlight]

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      funktioniert perfekt!!! Besten Dank Falk!

      Das ist übrigens der erste Join-Ausdruck dessen Funktion ich verstanden habe. Hatte mich mal versucht damit zu beschäftigen, aber irgendwie konnte ich einfach das Prinzip der Joins nicht ganz verstehen bzw. ich hatte es nie geschafft sie richtig anzuwenden. Wenn jemand eine gute Dokumentation zu diesen JOINs hat, dann immer her damit! Denn bei der offiz. mySQL Dokumentation hab ich kaum etwas verstanden. Nicht selten ist es so, dass man erst wissen muss worum es in einem Text geht bevor man ihn auch versteht. Ist zumindest bei mir so...

      Comment


      • #4
        Habe noch eine weitere Frage. Wenn ich nach dem obigen Schema so eine Abfrage mache, es aber in der <value-table> keinen Eintrag mit der gesuchten ID gibt, wie kann ich dann an dieser Stelle einen "Standartwert" einsetzen.

        Also z.B. sieht ein Eintrag in der <UINT-table> so aus:
        [ 2 | 44 | 38 | .... ]

        wobei ein Eintrag mit der ID 44 in der <value-table> nicht vorhanden sei. Nach dem obigen Schema würde - ich glaube wegen dem INNER JOIN - dieser Eintrag gar nicht aufgelistet werden. Habe einpaar andere JOINS einfach mal ohne den Unterschied zu kennen ausprobiert und mit LEFT JOIN hat er mir auch dann den Eintrag aufgelistet. Jedoch war der <value-Wert> NULL. Also z.B.

        [Hans | <NULL> | Meier | ...]

        Meine Frage ist nun, wie ich diesen Fall "abfangen" und mit einem Default-Wert ersetzen kann, um z.B. den Wert 0 statt NULL (also nichts) zu erhalten.

        mfg dundanox

        Comment


        • #5
          COALESCE (<Feld>, 0)

          Comment


          • #6
            Originally posted by ebis View Post
            COALESCE (<Feld>, 0)
            ...oder für diesen Fall besser IFNULL().

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment

            Working...
            X