Hallo,
userid_1 userid_2
23 45
53 23
23 45
45 23
45 23
23 77
was ich möchte wäre einen counter der die Häufigkeit zählt und gruppiert - so dass nur eine Paarung von userid_1 und user_id2 vorkommt:
userid_1 userid_2 counter
23 45 4
53 23 1
23 77 1
offensichtlich ist es Dir gleichgültig, ob userid_1 aus userid_1 oder userid_2 stammt :-)
Wenn die Werte in den beiden Spalten stets ungleich sind, so kannst Du Dich auf den Fall beschränken, dass der Wert in der ersten Spalte kleiner ist als der Wert in der zweiten Spalte:
a) wir formen die Ausgangsdaten entsprechen um:
SELECT
userid_1 user1, -- die Spaltennamen des ersten Selects bestimmen die
userid_2 user2 -- Spaltennamen des Resultats, hier mit Aliasnamen
FROM
tabelle
WHERE
userid_1 < userid_2
-- und fügen anschließend alle Werte ein, bei denen der Wert in der zweiten
-- Spalte kleiner ist als in der ersten.
UNION ALL
SELECT
userid_2,
userid_1
FROM
tabelle
WHERE
userid2 > userid_1
Diese Ergebnismenge dient uns als Ausgangspunkt für das Gruppieren und Zählen:
SELECT
s.user1,
s.user2,
COUNT(*) counter
FROM (
SELECT
userid_1 user1,
userid_2 user2
FROM
tabelle
WHERE
userid_1 < userid_2
UNION ALL
SELECT
userid_2,
userid_1
FROM
tabelle
WHERE
userid2 > userid_1
) s -- es ist wichtig, der inneren Abfrage einen
-- Namen zu geben!
liefert mit Deinen Ausgangsdaten:
user1 user2 counter
---------------------
23 45 4
23 53 1
23 77 1
mit der von mir genannten Einschränkung das von Dir gewünschte Resultat.
Dürfen auch gleiche Werte vorkommen, so ersetze einen der beiden Operatoren durch einen, der auch auf Gleichheit passt.
Freundliche Grüße
Vinzenz