MySQL-Zeilen werden mehrfach ausgegeben

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

  • MySQL-Zeilen werden mehrfach ausgegeben

    Hallo,

    hab hier folgende MySQL-Zeile:

    $sql = "SELECT
    DISTINCT grundrissprofi_uploads.id as 'posten_id', grundrissprofi_uploads.postennummer as 'postennummer', grundrissprofi_kunden.username as 'username', grundrissprofi_kunden.strasse as 'strasse', grundrissprofi_kunden.hausnummer as 'hausnummer', grundrissprofi_kunden.plz as 'plz', grundrissprofi_kunden.ort as 'ort', grundrissprofi_uploads.user, grundrissprofi_uploads.vorlage_dateiname as 'vorlage_dateiname', grundrissprofi_uploads.infos as 'infos', grundrissprofi_uploads.qualitaet as 'qualitaet', grundrissprofi_uploads.druckanzahl as 'druckanzahl', grundrissprofi_uploads.download_dateiname as 'download_dateiname', grundrissprofi_uploads.zeitpunkt_upload as 'zeitpunkt_upload', grundrissprofi_uploads.zeitpunkt_bestellung as 'zeitpunkt_bestellung', grundrissprofi_uploads.zeitpunkt_bearbeitung as 'zeitpunkt_bearbeitung', grundrissprofi_uploads.druck as 'druck', grundrissprofi_uploads.flag_grundriss_in_bearbeitung as 'flag_grundriss_in_bearbeitung', grundrissprofi_uploads.download_bearbeiter_id as 'download_bearbeiter_id', grundrissprofi_uploads.zeitpunkt_bearbeitung < DATE_SUB( NOW(), INTERVAL 90 MINUTE) as 'liegengeblieben', grundrissprofi_kunden.name as 'name', grundrissprofi_kunden.vorname as 'vorname', grundrissprofi_kunden.id, grundrissprofi_bearbeiter.username as 'bearbeiter_username', grundrissprofi_bearbeiter.vorname as 'bearbeiter_vorname', grundrissprofi_bearbeiter.name as 'bearbeiter_name'
    FROM grundrissprofi_uploads, grundrissprofi_kunden, grundrissprofi_bearbeiter
    WHERE (grundrissprofi_kunden.id=grundrissprofi_uploads.user) AND (druck<>'1') AND (grundrissprofi_uploads.flag_bestellung_schon_losgeschickt='1') AND (grundrissprofi_uploads.flag_grundriss_schon_bearbeitet='0' OR grundrissprofi_uploads.flag_moeblierung_schon_bearbeitet='0') AND ((grundrissprofi_uploads.flag_grundriss_in_bearbeitung='0') OR (grundrissprofi_uploads.zeitpunkt_bearbeitung > DATE_SUB( NOW(), INTERVAL 90 MINUTE)) OR (grundrissprofi_uploads.zeitpunkt_bearbeitung < DATE_SUB( NOW(), INTERVAL 90 MINUTE) AND grundrissprofi_uploads.download_bearbeiter_id=grundrissprofi_bearbeiter.id) )
    ORDER BY grundrissprofi_uploads.zeitpunkt_upload DESC";
    "Trotz" (?) DISTINCT wird jede Zeile, die die WHERE-Kriterien erfüllt, drei mal ausgegeben. Woran liegt das grob gesagt und wie lässt sich das beheben (in PHP filtern fällt natürlich weg, soll schon in SQL selber geregelt werden )? Muss ich hier gruppieren (GROUP BY) oder mit JOIN ran...?


    (Dass ich in der WHERE-Klausel nicht "grundrissprofi_uploads.zeitpunkt_bearbeitung < DATE_SUB( NOW(), INTERVAL 90 MINUTE" durch das Alias "liegengeblieben" ersetzen und dann boolisch auf 0 oder 1 abfragen kann, kommt noch hinzu, jedenfalls lässt er mir das nicht durchgehen, dass ich das Alias in der Bedingung verwende.)

    Gruß Maik
    Zuletzt geändert von *Maiki; 13.06.2007, 14:31.

  • #2
    Aha, also

    GROUP BY posten_id
    hats nun nach langem Hin und Her gelöst.

    Jetzt würd mich nur noch interessieren, was in der Abfrage dafür verantwortlich ist, dass jede Zeile drei mal gefunden wird und ob sich das nur über GROUP BY verhindern lässt oder ob das auch durch einen kleinen Umbau, vielleicht über JOIN, ginge.

    Kommentar


    • #3
      afaik traust du DISTINCT etwas zuviel zu und zwingst deine DB am Ende damit in die Knie. GROUP BY kommt besser.
      Und ist man alt wie ein Kuh, lernt man immer noch dazu.
      THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia

      Kommentar

      Lädt...
      X