我在mysql的hashtags中有一个表:
strHash | nPersonID
-------------------------
#dogowner | 1
#catowner | 1
#dogowner | 2
#mouseowner | 3
#fish | 3
#vancouver | 1
#vancouver | 3
我想用MySQL
语句查询表格,并说我想要nPersonID = 1
,返回所有共享 的人的结果< / em> strHash
值。
这样我就可以在查看特定的人时显示类似的人。 (或者,共享类似哈希标签的人 - 有些但不一定全部)
答案 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)
这个想法:
查询:
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(有点修改)