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

时间:2013-04-09 15:20:29

标签: php mysql

我有一个包含列的表: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

有什么想法吗?

1 个答案:

答案 0 :(得分: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

输出

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