PHP&;MySQL:在一条语句中,计算一行相同的相似行数


PHP & MySQL: Count number of similar rows with one row same, in one statement

我有一个包含列的表:useridproductid

我想在一份声明中做到以下几点:对于每个成员,计算与另一个指定成员的产品相匹配的产品数。

示例表:

userid productid
1      10
1      14
2      10
3      12
3      14
3      10
3      19
4      15

在上面的例子中,如果我指定了userid 1,那么我想要得到一个看起来像这样的结果:

userid matches
2      1
3      2
4      0

结果看起来像上面的,因为这些是每个用户的产品,与我指定的用户(1(的产品相匹配。

事实上,我也想按matches desc订购,并且只在matches>0的地方订购。因此:

userid matches
3      2
2      1

有什么想法吗?

SELECT  a.UserID, COUNT(*) `matches`
FROM    TableName a
        INNER JOIN 
        (
            SELECT  ProductID
            FROM    TableName
            WHERE   userID = 1
        ) b ON a.ProductID = b.ProductID
WHERE   a.userID <> 1
GROUP   BY a.UserID
HAVING  COUNT(*) > 0
  • SQLFiddle演示

输出

╔════════╦═════════╗
║ USERID ║ MATCHES ║
╠════════╬═════════╣
║      2 ║       1 ║
║      3 ║       2 ║
╚════════╩═════════╝