Announcement

Collapse
No announcement yet.

Doppelte einträge ignorieren

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

  • Doppelte einträge ignorieren

    Hallo entwickler gemeinde,

    ich versuche jetzt schon länger, das doppelte einträge beim auslesen der mysql db ignoriert werden:



    Folgendes habe ich versucht
    Code:
    SELECT DISTINCT id, user, date FROM users WHERE status > 0 ORDER BY date DESC
    Wichtig ist hierbei das nach datum sortiert wird, habe schon gelesen das man auch über der 'ORDER BY' die möglichkeit hätte, die ich leider aber in diesem fall nicht nutzen kann.
    Gibt es noch eine andere möglichkeit?
    Vielen dank im voraus für hilfe.

    Gruß

  • #2
    Hallo,
    Originally posted by ewrson View Post
    ...das doppelte einträge beim auslesen der mysql db ignoriert werden:
    Bitte spezifiziere "doppelte einträge ... ignoriert werden" etwas genauer. Sollen Datensätze bei denen user mehr als einmal auftaucht komplett ausgeblendet werden oder nur einmal mit kleinstem / größtem date / id auftauchen?

    Gruß Falk

    P.S.: Mit einer Suche nach "doppelte datensätze" solltest du jede Menge Lösungsansätze finden!
    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
      Originally posted by Falk Prüfer View Post
      ... oder nur einmal mit größtem date auftauchen?!
      Genau das

      Ja habe ich bin auch schon ein schritt weiter.

      Code:
      SELECT id, user, date FROM users GROUP BY user ORDER BY date DESC
      Aber hier werden mir komischerweise keine neuen einträge aktuelleren datums angezeigt?



      Der rote bereich sollten angezeigt werden, aber es wird der blaue genommen? (bild ohne GROUP BY)
      Es wird scheinbar nicht das aktuelle genommen sondern der aller erste eintrag, ohne rücksicht auf das datum



      Bei 'ODER BY' wird nur das ASC bzw. DESC berücksichtigt, nicht aber date oder id

      Comment


      • #4
        Originally posted by ewrson View Post
        Code:
        SELECT id, user, date FROM users GROUP BY user ORDER BY date DESC
        Aber hier werden mir komischerweise keine neuen einträge aktuelleren datums angezeigt?
        Das ist ja auch Murks, den so nur MySQL akzeptiert. In der Group-By-Klausel müssen ALLE Felder der Select-Klausel aufgeführt werden, die funktionell abhängig sind.
        Das ist in deinem Fall mindestens noch die Spalte id, da es zu jedem user mehrere id geben kann.
        Lösen kannst du das nur mit einer Subquery und damit hier zum gefühlten 1000sten Mal:
        [highlight=sql]
        select a.id, a.user, a.date
        FROM users a
        where a.date = (
        select max(b.date)
        from users b
        where b.user = a.user
        )
        [/highlight]

        Nachteil: Wenn es zu einem date zwei (oder mehr) Größte (weil gleiche) gibt, dann hast du wieder "Doppelte".

        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


        • #5
          Vielen vielen dank, das war die lösung

          Originally posted by Falk Prüfer View Post
          Nachteil: Wenn es zu einem date zwei (oder mehr) Größte (weil gleiche) gibt, dann hast du wieder "Doppelte".

          Gruß Falk
          Das ist sehr unwarscheinlich das dies passieren wird.

          Comment


          • #6
            Originally posted by Falk Prüfer View Post
            Nachteil: Wenn es zu einem date zwei (oder mehr) Größte (weil gleiche) gibt, dann hast du wieder "Doppelte".
            Dem könntest du mit einem LIMIT 1 entgegenwirken:

            [highlight=sql]
            select a.id, a.user, a.date
            FROM users a
            where a.date = (
            select max(b.date)
            from users b
            where b.user = a.user
            LIMIT 1
            )
            [/highlight]

            Comment


            • #7
              Hallo,
              Originally posted by Civlo View Post
              Dem könntest du mit einem LIMIT 1 entgegenwirken:

              [highlight=sql]
              select a.id, a.user, a.date
              FROM users a
              where a.date = (
              select max(b.date)
              from users b
              where b.user = a.user
              LIMIT 1
              )
              [/highlight]
              Nein, das ist Unsinn! Die Subquery:
              [highlight=sql]
              select max(b.date)
              from users b
              where b.user = a.user
              [/highlight]
              liefert in in JEDEM Fall nur EINEN Datensatz, da macht ein Limit überhaupt keinen Sinn.
              Jedoch liefert die äußere Abfrage dann ZWEI (oder mehr) Datensätze, wenn es nämlich ZWEI (oder mehr) a.date gibt, die GLEICH max(b.date) sind.

              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