SQL语句在查找表中获取类似记录

时间:2014-06-12 06:13:47

标签: mysql sql

我在mysql的hashtags中有一个表:

strHash     |  nPersonID
-------------------------
#dogowner   |     1
#catowner   |     1
#dogowner   |     2
#mouseowner |     3
#fish       |     3
#vancouver  |     1
#vancouver  |     3

我想用MySQL语句查询表格,并说我想要nPersonID = 1,返回所有共享 的人的结果< / em> strHash值。

这样我就可以在查看特定的人时显示类似的人。 (或者,共享类似哈希标签的人 - 有些但不一定全部)

5 个答案:

答案 0 :(得分:1)

获得与人1共享hastag的人员列表的最简单方法是:

SELECT DISTINCT nPersonID
FROM table
WHERE strHash IN (
  SELECT b.strHash
  FROM table b
  WHERE b.nPersonID=1
)

但是你可以获得一些额外的信息而不会让事情太复杂。 例如,此查询将列出相同的人,但也会为您量化这些人的主题标签与这些人的相似程度1:

SELECT nPersonID, COUNT(DISTINCT strHash) AS shared_hashtags
FROM table
WHERE strHash IN (
  SELECT b.strHash
  FROM table b
  WHERE b.nPersonID=1
)
GROUP BY nPersonID
ORDER BY shared_hashtags DESC

这将选择拥有一个或多个人1所拥有的主题标签的所有人...包括人1。

结果清单将按照常见的hastags的数量排序......最相似的人(包括人1)。

答案 1 :(得分:0)

试试这个SQL:

SELECT DISTINCT t2.nPersonID
FROM table t1
JOIN table t2
  ON t1.strHash = t2.strHash
WHERE t1.nPersonID = 1

答案 2 :(得分:0)

这个想法:

  • 获取所选人员的主题标签
  • 获取所有具有类似主题标签的人
  • 计算匹配的hastags数量

查询:

SELECT
    S.nPersonId
    , COUNT(1) AS SimilarHashCount
FROM (
        SELECT
            strHash
        FROM
            hashtags
        WHERE
            nNersonID = 1
    ) P
    INNER JOIN (
        SELECT
            strHash
            , nPersonD
        FROM
            hashtags
        WHERE
            nNersonID != 1
    ) S
        ON P.strHash = S.strHash
GROUP BY
    S.nPersonID
ORDER BY
    COUNT(1) DESC

您可以限制结果,也可以使用HAVING语句过滤结果

答案 3 :(得分:0)

实现这一目标的很多方法。我会用以下查询

来做
SELECT DISTINCT [nPersonID]
  FROM [htag]
  where strHash in (select strHash FROM [htag] where [nPersonID] = 1)

这将输出如下

nPersonID
1
2
3

如果您希望获得没有ID“1”(请求ID)的结果,请添加另一个条件

SELECT DISTINCT [nPersonID]
  FROM [htag]
  where strHash in (select strHash FROM [htag] where [nPersonID] = 1)
    and [nPersonID] != 1

输出:

nPersonID
2
3

希望这有帮助!

答案 4 :(得分:0)

 SELECT *, COUNT(*) FROM XXX GROUP BY strHash HAVING COUNT(*) > 1

之前已经问过这个问题 - How to select non "unique" rows

上面的答案属于judda(有点修改)