2017-09-30 6 views
0

Dies ist Freunde Tabellemysql einzigartige Kombination aus zwei Spalten

userid(int) | friendid(int) | confirmed(tiny int) 
-------------------- 
1 | 2 | 1 
2 | 1 | 1 
1 | 3 | 1 
3 | 1 | 1 
1 | 5 | 0 
2 | 4 | 1 
4 | 2 | 1 
4 | 1 | 1 
1 | 4 | 1 

Ich habe etwa 200k Zeilen wie diese Ich möchte Duplikate Beispiel löschen, wenn Benutzer-ID = 1 und friendID = 2 dann nächste Zeile userid Ich möchte nicht = 2 friendid = 1

Ich möchte einzigartige Kombination über 2 Spalten bedeutet, wenn 1,2 ist da dann 2,1 sollte nicht da sein und sollte gelöscht werden.

Dann kann ich Freundesliste Abfrage wie folgt machen:

select * from friends where (userid=1 or friendid=1) and confirmed=1 

Meine Fragen:

Wie diese doppelten Zeilen löschen?

Bitte geben Sie mir auch Anfrage, gemeinsame Freunde von 2 Benutzer zu finden (Benutzer-ID von ihnen kann in entweder Benutzer-Spalte oder Friendid in Freundes-Tabelle befinden).

+0

Stellen Sie nicht zwei Fragen in der gleichen Frage. – Barmar

Antwort

1

Verknüpfen Sie die Tabelle mit sich selbst, um die Zeilen mit demselben Benutzerpaar in umgekehrter Reihenfolge zu finden.

DELETE f1 
FROM friends as f1 
JOIN friends AS f2 ON f1.userid = f2.friendid AND f1.friendid = f2.userid 
WHERE f1.friendid > f1.userid 

Die WHERE Klausel sicherzustellen, dass wir nur in dem Satz eine der beiden Zeilen löschen.

Verwandte Themen