• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] DISTINCT nur auf eine Spalte anwenden

scbawik

Senior HTML'ler
Hallo!

Habe gerade ein Problem mit einer MySQL-Query. Zuerst die zwei Tabellen (vereinfacht):

Projects:
#-----------------------------------#
| id | Bezeichnung | Farbe |
#-----------------------------------#
| 1 | Baumhaus | #CCC |
| 2 | Höhle | #EFE |
| 3 | Höhle | #CCC |
#-----------------------------------#

Images:
#---------------------------------#

| id | Projekte_id | Beschreibung |
#---------------------------------#
| 1 | 1 | Baumhaus |

| 2 | 1 | Baumhaus |
| 3 | 1 | Baumhaus |
| 4 | 2 | Höhle |
| 5 | 2 | Höhle |
#---------------------------------#

Ich möchte jetzt alle Projekte selektieren die Bilder haben, allerdings natürlich nicht doppelt/mehrfach. Derzeit habe ich folgende Query:
SELECT DISTINCT p.id, p.Bezeichnung, p.Farbe FROM Projects p, Images i WHERE i.Projekte_id = p.id;

Mit dieser Abfrage wird nun leider auch p.Bezeichnung und p.Farbe auf Verschiedenheit überprüft.
Weiß jemand zufällig wie ich DISTINCT nur auf p.id anwenden kann? Bzw. wie man es anders oder besser machen könnte?

Danke!

 
Werbung:
hallö,

versteh glaube nicht als einziger die frage, deswegen hat wohl auch noch keiner geantwortet.
hast aber vielleicht mal einfach mir gropp by versucht?

cheffchen
 
Hm, ok, habe es bereits mit group by versucht, bin damit aber nicht weiter gekommen.

Also, nochmal.

Ich habe eine Tabelle (projects) mit Projekte:

id, Bezeichnung
121, Projekt1
122, Projekt2
123, Projekt3


Die zugeordneten Bilder werden in einer separaten Tabelle (images) gespeichert:

id, Project_id, Bezeichnung
1, 121, Bild1
2, 121, Bild2
3, 121, Bild3
4, 122, Bild4
5, 122, Bild5


Mein Ziel ist es nun, alle Projekte zu selektieren, welche mindestens ein Bild zugewiesen haben.
Dazu nehme ich folgende Abfrage:
SELECT p.id, p.Bezeichnung FROM projects p, images i WHERE p.id = i.Project_id

Dadurch würde ich jetzt am oberen Beispiel folgende Rückgabe erhalten:
121, Projekt1
121, Projekt1
121, Projekt1
122, Projekt2
122, Projekt2


Es werden also Duplikate zurückgegeben.
Ich möchte aber folgendes Ergebnis:
121, Projekt1
122, Projekt2


Habe dafür bisher DISTINCT genommen:
SELECT DISTINCT p.id, p.Bezeichnung FROM projects p, images i WHERE p.id = i.Project_id

Dies hat nun aber zur Folge, dass nicht nur p.id auf Duplikate geprüft wird, sondern auch p.Bezeichnung. Wenn also zwei komplett verschiedene Projekte gleich heißen, wird nur eines ausgegeben.

Ich weiß jetzt inzwischen dass sich DISTINCT nur auf alle Spalten anwenden lässt. Nur weiß ich leider nicht wie ich diese Abfrage anders/ohne DISTINCT aufbauen kann.
 
Werbung:
Probier es mal mit GROUP statt DISTINCT.

Code:
SELECT p.id, p.Bezeichnung, p.Farbe FROM Projects p, Images i WHERE i.Projekte_id = p.id GROUP BY p.id, p.Bezeichnung, p.Farbe;
 
Vielen Dank, das wars. Hatte dies leider bei einer Query mit COUNT() getestet, dort geht das aber nicht, wie ich gerade gelesen habe.
Jetzt funktioniert es :)

Danke noch mal!
 
Zurück
Oben