-> MYSQL -> SELECT -> Ausgabe ohne doppelte Einträge
Guma
- datenbank
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
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
Danke Ilja mache ich und melde mich wieder.
Guma
Danke, das war das Problem! Leerzeichen waren unterschiedlich.
Guma
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
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
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
Hallo!
MySQL berücksichtigt das bei mir nicht:
SELECT DISTINCT TRIM( aktivitaet )
FROM aktivitaeten
ORDER BY aktivitaetSteht das TRIM an der falschen Stelle?
Müsste so funktionieren. Dann sind es wahrscheinlich keine Leerzeichen die im String sind.
mfg
frafu
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";
yo,
nimm doch mal solche datensätze mit doppelten treffern und lass dir den asci-code ausgeben, der einzelnen zeichen.
Ilja