PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [MySQL] gleicher Inhalt mehrerer Spalten nur einmal ausgeben


terrific
2007-03-17, 15:15:53
Hey Folks.

Ich habe hier mehrere Spalten in einer MySQL Datenbank, alle davon beinhalten ISBN-Nummern. Dabei kann in jeder einzelnen Spalte eine ISBN Nummer mehrfach vorkommen, genauso können aber in einer Spalte auch ISBN Nummern einer anderen Spalte stehen.
Jetzt würde ich gerne alle vorhandenen ISBN-Nummern auslesen, jedoch keine doppelt und alle Spalten sollen miteinbezogen werden.

Mit "DISTINCT" habe ich das damals für eine einzelne Spalte hinbekommen, ich will ja allerdings alle einbeziehen (in PHP soll die Ausgabe übrigens stattfinden):


$sql = "SELECT DISTINCT
isbn
FROM
Books";


Wie erwähnt hatte ich dann alle ISBN-Nummern einer spalte, und zwar ohne doppelte Einträge, hätte aber gerne noch die Spalten isbn2 und isbn3 miteinbezogen.

Neomi
2007-03-17, 15:58:34
Nur ein ungetesteter Schnellschuß, aber so in etwa sollte das funktionieren:

"SELECT DISTINCT isbn FROM Books UNION SELECT DISTINCT isbn2 AS isbn FROM Books UNION SELECT DISTINCT isbn3 AS isbn FROM Books [ORDER BY isbn];"

Ein nachfolgendes "ORDER BY isbn" gilt für die Union der drei SELECT-Statements, nicht nur für das letzte.

terrific
2007-03-17, 16:23:53
Danke vielmals, so wie es momentan aussieht funktioniert das bestens :)

Gast
2007-03-17, 16:29:48
Sorry für den Doppelpost, aber hab noch eine letzte Frage:

Wie kann ich leere Einträge ingorieren? Die erste Zeile der Ausgabe ist einfach leer, da es in der DB auch ein par leere Felder gibt, was sich nicht verhindert ließ.

Neomi
2007-03-17, 16:37:28
Dazu mußt du in jeden der drei SELECTs noch die passende Bedingung einfügen. Wenn du den leeren String "" nicht haben willst, dann geht das so:

"... FROM Books WHERE isbn2 != '' UNION ..."

Ist hier vielleicht schwer zu erkennen, aber der Leerstring besteht aus zwei einfachen Anführungsstrichen, nicht einem doppelten. Der Operator != bedeutet "ungleich".

terrific
2007-03-29, 19:57:50
Dank dir :)

Das Beispiel oben funktioniert zwar einwandfrei, habe aber mit UNION Probleme.

Ich will nun aus beiden Spalten die ISBN Nummern ausgeben, allerdings diesmal doppelte Einträge drinlassen (also DISTINT weglassen).

Lese ich die erste Spalte einzeln aus, bekomme ich 200 Einträge.
Lese ich die zweite Spalte aus, bekomme ich ca. 70.

Verbinde ich die Ausgabe nun mit Union, habe ich jedoch keine 270 Ausgaben sondern nurnoch 90?

Neomi
2007-03-30, 00:13:21
UNION ist einfach nur eine Kurzform für UNION DISTINCT, doppelte Ergebnisse werden deshalb bei der Verknüpfung rausgeworfen. Was du suchst, ist UNION ALL.