Zacznij od zapytania, które pobiera wszystkie kolekcje zawierające wybrany element:
SELECT collectionId
FROM wishLists
WHERE itemId = 876
Z tego chcesz uzyskać wszystkie inne identyfikatory przedmiotów w tych kolekcjach.
SELECT itemId
FROM wishLists
WHERE collectionId IN (above query)
AND itemId != 876
Można to przepisać jako sprzężenie:
SELECT a.itemId
FROM wishLists AS a
JOIN wishLists AS b ON a.collectionId = b.collectionId
WHERE a.itemId != 876 AND b.itemId = 876
Teraz możesz policzyć powtórzenia tego, aby znaleźć najczęstsze:
SELECT a.itemId
FROM wishLists AS a
JOIN wishLists AS b ON a.collectionId = b.collectionId
WHERE a.itemId != 876 AND b.itemId = 876
GROUP BY a.itemId
ORDER BY COUNT(*) DESC
Dodaj LIMIT n
klauzula na końcu, aby pokazać n pierwszych pozycji.