[MySQL 3.23.X] Ausgabe- & Sotierungsproblem

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

  • [MySQL 3.23.X] Ausgabe- & Sotierungsproblem

    Hallo zusammen,

    also ich habe drei Tabellen:

    tabelle1:
    id int PRIMARY
    bz char(2)

    tabelle2:
    id int PRIMARY
    anzahl int
    id1 int

    tabelle3:
    id int PRIMARY
    txt char(2)
    id1 int

    dazu folgenden Befehl:

    SELECT t1.bz, t3.txt, t2.anzahl * 5 / 2 AS anzahl
    FROM tabelle1 as t1
    LEFT JOIN tabelle2 AS t2 ON t1.id = t2.id1
    LEFT JOIN tabelle3 AS t3 ON t1.id = t3.id1
    ORDER BY anzahl

    als Ergebnis gibts folgendes:

    mx | bz | 20
    km | jh | 35
    mx | mk | 55

    Wie bekomme ich es nun hin dass mx nur einmal vor kommt, mit dem kleinsten Wert? SELECT DISTINCT ... funktionierts hier ja nicht. Irgendwelche Ideen?


    Gruß Sascha

  • #2
    SELECT DISTINCT ...
    Tatsache?

    Kommentar


    • #3
      Original geschrieben von TobiaZ
      Tatsache?
      Tatsache. Liegt es nicht daran dass "DISTINCT" nur die nicht doppelt anzeigt die komplett identisch sind, also in allen Feldern?

      Kommentar


      • #4
        wenn du DISTINCT auf ein Feld anwendest sollte das nicht der fall sein.

        Kommentar


        • #5
          du kannst mysql aber nicht sagen, dass das DISTINCT nur für eines der drei abgefragten felder gelten soll

          http://www.php-resource.de/forum/sho...852#post279852 sollte dir helfen
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            ups, falsch gedacht.

            Kommentar


            • #7
              Original geschrieben von mrhappiness
              du kannst mysql aber nicht sagen, dass das DISTINCT nur für eines der drei abgefragten felder gelten soll

              http://www.php-resource.de/forum/sho...852#post279852 sollte dir helfen
              danke für den guten Ansatz, leider konnte ich aber das Problem noch nicht lösen, da der Befehl eigentlich ähnlich wie folgt aussieht (nur ähnlich, Beispiel gibt natürlich kein Sinn):

              SELECT t1.bz, t3.txt, t2.anzahl * SUM ( t3.id ) / 2 AS anzahl
              FROM tabelle1 AS t1
              LEFT JOIN tabelle2 t2 ON t1.id = t2.id1
              LEFT JOIN tabelle3 t3 ON t1.id = t3.id1
              GROUP BY t1.id
              ORDER BY anzahl

              da der Wert berechnet wird erfolgt das hinzufügen vom LEFT JOIN, wie im Beispiel nicht erfolgreich.

              Wie würdest du folgendes vervollständigen?

              LEFT JOIN tabelle1 dummy ON dummy.id = t1.id AND ???

              mit "anzahl" kann ich an dem Punkt ja auch noch nicht arbeiten

              Kommentar


              • #8
                mir ist gerade noch aufgefallen dass wenn man beim Beispiel unten "DISTINCT" mit benützt, zwar das Feld "t1.bz" sauber aufgeräumt wird aber natürlich nicht nach der geringsten Zahl sortiert wird, da da danach erst später geordnet wird ... hm

                SELECT t1.bz, t3.txt, t2.anzahl * SUM ( t3.id ) / 2 AS anzahl
                FROM tabelle1 AS t1
                LEFT JOIN tabelle2 t2 ON t1.id = t2.id1
                LEFT JOIN tabelle3 t3 ON t1.id = t3.id1
                GROUP BY t1.bz
                ORDER BY anzahl

                Kommentar


                • #9
                  Hat jemand noch eine Idee?

                  Kommentar


                  • #10
                    Re: [MySQL 3.23.X] Ausgabe- & Sotierungsproblem

                    Original geschrieben von aevo
                    SELECT t1.bz, t3.txt, t2.anzahl * 5 / 2 AS anzahl
                    FROM tabelle1 as t1
                    LEFT JOIN tabelle2 AS t2 ON t1.id = t2.id1
                    LEFT JOIN tabelle3 AS t3 ON t1.id = t3.id1
                    ORDER BY anzahl

                    als Ergebnis gibts folgendes:

                    mx | bz | 20
                    km | jh | 35
                    mx | mk | 55
                    Hallo aevo
                    Du hast galube ich ein prinzipielles Problem, das Du erst lösen muss.

                    Das Ergebnis kann so nicht stimmen.
                    mx ist sowohl mit bz als auch mit mk verknüpft.
                    mx ist sowohl mit 20 als auch mit 55 verknüpft.
                    Macht nach Adam Riese 2x2 Zeilen, eine noch für km jh = 5 Zeilen.
                    Warum stehen da nur 3 statt 5??

                    Wenn mx nur einmal vorkommen soll, welchen Wert willst Du aus Tabelle 3?
                    bz oder mk? Warum?

                    Ohne Tabelle3 bekommst Du den kleinsten Eintrag aus t2 pro t1.bz so:

                    SELECT t1.bz, min( t2.anzahl) as anzahl
                    FROM tabelle1 as t1
                    LEFT JOIN tabelle2 AS t2 ON t1.id = t2.id1
                    group by t1.bz

                    Kommentar


                    • #11
                      Hi fuser,

                      das oben sollte nur ein Beispiel sein um die Frage zu beantworten wie ich es per SQL hinbekommen mehrere gleiche Ausgaben mit verscheiden berechnete Werte, nach dem Kleinsten zu sortieren und nur diesen auszugeben.

                      Also könnte man auch ruhig ein SQL Befehl ohne JOINS nehmen, z.B.:

                      SELECT t1, t2*17/3 AS Anzahl
                      FROM tabelle
                      ORDER BY Anzahl

                      Ausgabe:

                      m | 12
                      k | 22
                      m | 35

                      Da würde dann nämlich folgendes auch nicht helfen:

                      SELECT DISTINCT t1, t2*17/3 AS Anzahl
                      FROM tabelle
                      GROUP BY t1
                      ORDER BY Anzahl

                      Weil es dann nicht sicher ist dass die Spalte mit dem kleinsten Wert ausgegeben wird (GROUP & DISTINCT greifen vor ORDER).

                      Kommentar

                      Lädt...
                      X