2012-04-14 3 views
1

Hallo hofft jemand beratenSQL-Abfrage, ging es läuft es das gleiche Ergebnis durch die Anzahl der Benutzer wiederholt

Ich habe eine SQL-Abfrage, ging es läuft es das gleiche Ergebnis durch die Anzahl der Benutzer (Einträge) wiederholt gemacht

zum Beispiel:

post_id 
20 
20 
19 
19 
18 
18 

könnte Hier wird die Abfrage es keine Argumente hat jemand erklären, warum dies geschieht, bitte?

Dank

SELECT DISTINCT post_look.post_id, post_look.look_id, post_look.date_posted,  looks.title, looks.item_id, user.user_id, user.first_name, user.last_name, user_account.profile_image, user_account.account_status, add_profile_images.image_name 
FROM post_look 
JOIN looks ON looks.look_id = post_look.look_id 
JOIN add_look_item ON add_look_item.look_id = looks.look_id 
JOIN item ON item.item_id = add_look_item.item_id 
JOIN add_images ON add_images.item_id = item.item_id 
JOIN user_item ON user_item.item_id = item.item_id 
JOIN user_account ON user_account.account_id = user_item.account_id 
JOIN user ON user.user_id = user_account.user_id 
JOIN users_profile_images ON users_profile_images.account_id = user_account.account_id 
JOIN add_profile_images ON add_profile_images.image_id = users_profile_images.image_id 
ORDER BY post_look.post_id DESC 
LIMIT 0 , 30 
+0

Welches Ergebnis erwarten Sie? – Dojo

+0

Hallo Priyank - ein Ergebnis pro Benutzer pro Auswahl, so würde 20,19,18 zum Beispiel – Alan

+0

zurückgeben Sie geben mehrere Spalten in Ihrem Ergebnis zurück. Sind Sie sicher, dass Sie ** zwei völlig identische Zeilen ** haben? Was gibt Ihre Aussage zurück, wenn Sie nur 'post_look.post_id' auswählen und alle anderen Spalten entfernen? –

Antwort

4
SELECT DISTINCT c1, c2, c3 

bedeutet, dass {c1, c2, c3} verschieden sein wird.

Sie sollten in Erwägung ziehen, GROUP BY post_look.post_id zu Ihrer Abfrage hinzuzufügen.

Sehen Sie den Unterschied hier:

+0

GROUP BY Ich bin neu dazu, das ist interessant, danke, Jaroslaw, haben ein Beispiel? – Alan

+0

@Alan - Fügen Sie einfach die gesamte Posted-Anweisung kurz vor Ihrer Order by-Klausel hinzu. –

+0

Sie können mehr über die Gruppe von hier lesen: http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html –

1

bitte Sie es versuchen?

SELECT post_look.post_id, post_look.look_id, post_look.date_posted,  looks.title, looks.item_id, user.user_id, user.first_name, user.last_name, user_account.profile_image, user_account.account_status, add_profile_images.image_name 
FROM post_look 
JOIN looks ON looks.look_id = post_look.look_id 
JOIN add_look_item ON add_look_item.look_id = looks.look_id 
JOIN item ON item.item_id = add_look_item.item_id 
JOIN add_images ON add_images.item_id = item.item_id 
JOIN user_item ON user_item.item_id = item.item_id 
JOIN user_account ON user_account.account_id = user_item.account_id 
JOIN user ON user.user_id = user_account.user_id 
JOIN users_profile_images ON users_profile_images.account_id = user_account.account_id 
JOIN add_profile_images ON add_profile_images.image_id = users_profile_images.image_id 
GROUP BY post_look.post_id 
ORDER BY post_look.post_id DESC 
LIMIT 0 , 30 
+0

Das ist identisch mit dem, was Jaroslaw vorgeschlagen ?! –

+0

@Lieven ja das ist danke zum Beispiel sarwar026 das funktioniert ein Leckerbissen dank Lieven für die Fehlersuche! – Alan

Verwandte Themen