sql >> Databasteknik >  >> RDS >> Mysql

MYSQL/PHP hittar det vanligaste objektet som associeras med ett visst objekt

Börja med en fråga som får alla samlingar som innehåller objektet du valde:

SELECT collectionId
FROM wishLists
WHERE itemId = 876

Från detta vill du få alla andra itemIds i dessa samlingar.

SELECT itemId
FROM wishLists
WHERE collectionId IN (above query)
AND itemId != 876

Detta kan skrivas om som en anslutning:

SELECT a.itemId
FROM wishLists AS a
JOIN wishLists AS b ON a.collectionId = b.collectionId
WHERE a.itemId != 876 AND b.itemId = 876

Nu kan du räkna upprepningarna av detta för att hitta de vanligaste:

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

Lägg till en LIMIT n klausul i slutet för att visa de n översta objekten.




  1. Välj från flera tabeller med laravel fluent query builder

  2. Få förfrågan tillbaka från PDO-förberedd uttalande

  3. MySQL-anslutningsproblem med teckenuppsättning

  4. Vad i helvete är en DTU?