Guma: -> MYSQL -> SELECT -> Ausgabe ohne doppelte Einträge

Guten Morgen,

ich habe eine MySql 5.0 Tabelle mit folgender Struktur:

id  |  aktivitaet

Jetzt will ich Werte ausgeben oder doppelte Einträge (bezüglich aktivitaet)

So habe ich es versucht:

SELECT DISTINCT aktivitaet FROM aktivitaeten ORDER BY aktivitaet ASC

Leider gibt es Einträge, die doppelt ausgegeben werden. Darunter sind auch Einträge, die z.B. 4-20 Mal vorkommen.

Ausgabe:

aktivitaet:

Bergwandern

Biken

Golf

Golf

Jogging

Jogging

Kajak

Kanu

Langlauf

Minigolf

Mountainbiking

Radfahren

Radfahren

Reiten

Reiten

Habe ich einen Fehler in der Abfrage? Grüße von Guma

  1. yo,

    mal davon abgesehen, dass du dir die angabe des ASC bei der Sortierung sparen kannst, weil es die standardeinstellung ist, ist deine abfrage richtig. ich vermute versteckte zeichen wie das leerzeichen bei den jeweiligen "doppelten" einträgen. gib mal zusätzlich zu der spalte noch die länge des strings aus. dann wird schnell klar, ob auch die gleiche anzahl an zeichen vorhanden ist.

    Ilja

    1. Danke Ilja mache ich und melde mich wieder.

      Guma

    2. Danke, das war das Problem! Leerzeichen waren unterschiedlich.

      Guma

  2. Hallo, das war der grund: bedeutungslose Leerzeichen in Feldern sind der grund für z.Teil doppelte Einträge.

    Kann ich die bedeutungslose Leerzeichen ignorieren, so dass keine Doppelergebnisse angezeigt werden.

    Klar ist das nicht ganz eindeutig, da die felder nicht identisch sind. Trotzdem sind Leerzeichen hinter dem Eintrag bedeutungslos.

    Wie könnte ich das hinbekommen?
    Guma

    1. Hallo!

      Klar ist das nicht ganz eindeutig, da die felder nicht identisch sind. Trotzdem sind Leerzeichen hinter dem Eintrag bedeutungslos.

      Wie könnte ich das hinbekommen?

      Mit der String Funktion TRIM. Besser aber, bei der Dateneingabe schon abfangen.

      mfg
        frafu

      1. Danke frafu,

        MySQL berücksichtigt das bei mir nicht:

        SELECT DISTINCT TRIM( aktivitaet )
        FROM aktivitaeten
        ORDER BY aktivitaet

        Steht das TRIM an der falschen Stelle?

        Guma

        1. Hallo!

          MySQL berücksichtigt das bei mir nicht:

          SELECT DISTINCT TRIM( aktivitaet )
          FROM aktivitaeten
          ORDER BY aktivitaet

          Steht das TRIM an der falschen Stelle?

          Müsste so funktionieren. Dann sind es wahrscheinlich keine Leerzeichen die im String sind.

          mfg
            frafu

        2. echo $begrüßung;

          MySQL berücksichtigt das bei mir nicht:

          SELECT DISTINCT TRIM( aktivitaet )
          FROM aktivitaeten
          ORDER BY aktivitaet

          Das Nichtberücksichtigen kann ich nicht nachvollziehen. Mit MySQL Version 5.0.21 probiert, geht diese Syntax.
          Es werden aber auch keine Leerzeichen berücksichtigt, wenn TRIM() weggelassen wird.

          SELECT DISTINCT foo FROM test; liefert eine Ergebniszeile, wenn ich zwei Zeilen, einmal mit 'bar' und einmal mit 'bar  ' im Feld foo habe. foo ist eine Spalte vom Typ varchar.

          MySQL behandelt Leerzeichen am Ende von Daten unterschiedlich. Einige Feldtypen berücksichtigen sie, andere nicht. Auch wurde dieses Verhalten wurde jüngst verändert. Welche Versionen das betrifft weiß ich nicht mehr, es stand aber irgendwo im Handbuch. Einen genauen Link habe ich grade nicht parat. (Vielleicht steht es auf der Auflistung der Veränderungen)

          echo "$verabschiedung $name";

        3. yo,

          nimm doch mal solche datensätze mit doppelten treffern und lass dir den asci-code ausgeben, der einzelnen zeichen.

          Ilja