Commencez par une requête qui obtient toutes les collections contenant l'élément que vous avez sélectionné :
SELECT collectionId
FROM wishLists
WHERE itemId = 876
À partir de là, vous souhaitez obtenir tous les autres ID d'élément de ces collections.
SELECT itemId
FROM wishLists
WHERE collectionId IN (above query)
AND itemId != 876
Cela peut être réécrit comme une jointure :
SELECT a.itemId
FROM wishLists AS a
JOIN wishLists AS b ON a.collectionId = b.collectionId
WHERE a.itemId != 876 AND b.itemId = 876
Vous pouvez maintenant compter les répétitions de ceci pour trouver les plus courantes :
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
Ajouter un LIMIT n
clause à la fin pour afficher les n premiers éléments.