Announcement

Collapse
No announcement yet.

Mehrere SELECTs gleichzeitig

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

  • Mehrere SELECTs gleichzeitig

    Hallo alle miteinander,
    ich bin neu hier und auch relativ neu in MySQL.

    Bei meinem Problemfall möchte ich mehrere, gleichartige SELECT-Abfragen absetzen, wo sich bei jeder Abfrage nur bestimmte WHERE-Eigenschaften unterscheiden.
    Momentan löse ich das, indem ich jedes mal eine neue SELECT-Abfrage absetze und die einzelnen Ergebnis-Resultsets dann manuell zur Ansicht "nebeneinander" bringe.

    Beispiel:
    Tabelle 'wert':
    (lfd_x, lfd_y, wert1, wert2, wert3, site_id)
    Tabelle 'site':
    (s_id, bezeichnung)

    Momentan mache ich prinzipiell:
    SELECT wert1, wert2, wert3 FROM wert, site WHERE lfd_x=1 AND lfd_y=1 AND site_id=s_id
    SELECT wert1, wert2, wert3 FROM wert, site WHERE lfd_x=8 AND lfd_y=8 AND site_id=s_id
    usw.
    und speicher mir dann, wie gesagt, jeweils die Erbebnismengen, um sie als eine große Tabelle darzustellen:

    (wert1, wert2, wert3, wert1, wert2, wert3, usw.).

    Kann ich diese SELECTs mit einem mal absetzen, sodass die "große" Tabelle zurückgegeben wird (UNION oder so)?

  • #2
    Originally posted by cruise86 View Post
    Hallo alle miteinander,
    ich bin neu hier und auch relativ neu in MySQL.

    Bei meinem Problemfall möchte ich mehrere, gleichartige SELECT-Abfragen absetzen, wo sich bei jeder Abfrage nur bestimmte WHERE-Eigenschaften unterscheiden.
    Momentan löse ich das, indem ich jedes mal eine neue SELECT-Abfrage absetze und die einzelnen Ergebnis-Resultsets dann manuell zur Ansicht "nebeneinander" bringe.

    Beispiel:
    Tabelle 'wert':
    (lfd_x, lfd_y, wert1, wert2, wert3, site_id)
    Tabelle 'site':
    (s_id, bezeichnung)

    Momentan mache ich prinzipiell:
    SELECT wert1, wert2, wert3 FROM wert, site WHERE lfd_x=1 AND lfd_y=1 AND site_id=s_id
    SELECT wert1, wert2, wert3 FROM wert, site WHERE lfd_x=8 AND lfd_y=8 AND site_id=s_id
    usw.
    und speicher mir dann, wie gesagt, jeweils die Erbebnismengen, um sie als eine große Tabelle darzustellen:

    (wert1, wert2, wert3, wert1, wert2, wert3, usw.).

    Kann ich diese SELECTs mit einem mal absetzen, sodass die "große" Tabelle zurückgegeben wird (UNION oder so)?
    genau. einfach UNION zwischen beide Querys. das war's

    Comment


    • #3
      Originally posted by mssqler View Post
      genau. einfach UNION zwischen beide Querys. das war's
      Achso..., ich dachte bei UNION werden die Queryergebnisse an den ersten Query angefügt, sodass das Result länger wird. Ich wollte aber, dass die einzelnen Queryergebnissmengen NEBENeinander zurückgegeben werden.

      Ich probiere es am Montag trotzdem mal aus, danke!

      Comment


      • #4
        Also ich hab das jetzt mit UNION nochmal ausprobiert und wie erwartet, werden die Ergebnisse des zweiten SELECTS nicht neben die des ersten, sondern unten drangehängt

        (SELECT w.wert2 AS 'WNK', w.wert4 AS 'pWNK Woche', w.wert6 AS 'pWNK Monat' FROM wert w, site s WHERE w.lfd_x=5 AND w.lfd_y=2 AND w.site_id=s.s_id AND angebotsname LIKE 'M%')
        UNION
        (SELECT w.wert2 AS 'WNK', w.wert4 AS 'pWNK Woche', w.wert6 AS 'pWNK Monat' FROM wert w, site s WHERE w.lfd_x=5 AND w.lfd_y=3 AND w.site_id=s.s_id AND angebotsname LIKE 'M%')

        Hab ich was "falsch" gemacht? oder gibt es andere Möglichkeiten?

        Danke.

        Comment


        • #5
          Wenn deine DB Subselects unterstützt, dann mach folgendes.
          Ist zwar umständlich, es funktioniert aber:
          Code:
          SELECT wert1, wert2, wert3,
          (SELECT wert1 FROM wert, site WHERE lfd_x=8 AND lfd_y=8 AND site_id=s_id) AS wert11,
          (SELECT wert2 FROM wert, site WHERE lfd_x=8 AND lfd_y=8 AND site_id=s_id) AS wert 21,
          (SELECT wert3 FROM wert, site WHERE lfd_x=8 AND lfd_y=8 AND site_id=s_id) AS wert 31
          FROM wert, site WHERE lfd_x=1 AND lfd_y=1 AND site_id=s_id
          "A common mistake that people make
          when trying to design something completely foolproof
          is to underestimate the ingenuity of complete fools.
          "
          >>> Douglas Adams, Mostly Harmless
          -------------------------------------------------------
          Techcrawler.de | JaMT | deCHK | Extra-Bonus-Shopping.de | Scour

          Comment


          • #6
            Hallo,
            Originally posted by cruise86 View Post
            ...Hab ich was "falsch" gemacht? oder gibt es andere Möglichkeiten?
            wenn die Spalten "nebeneinander" sollen, dann mußt du sie auch als solche nebeneinander definieren.
            Prinzipiell gäbe es zwei Möglichkeiten:
            • Du definierst eine Abfrage und nimmst die Spalten mittels der IF()-Funktion auseinander
            • Du definierst ein UNION als Subselect und nimmst die Spalten mit der IF()-Funktion auseinander

            [highlight=sql]
            select a, b, if(bedingung1, c, null) c1, if(bedingung2, c, null) c2
            from tabelle
            where bedingung1 or bedingung2
            [/highlight]

            [highlight=sql]
            select a, b, if(key=1, c, null) c1, if(key=2, c, null) c2
            from (
            select a, b, c, 1 key
            from tabelle
            where bedingung1
            union
            select a, b, c, 2 key
            from tabelle
            where bedingung2
            ) intab
            [/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

            Working...
            X