php - MySQL一对多关系,具有共享值

标签 php mysql

我有一个包含 3 个表的 MySQL 数据库。

简介, p_tags, 标签

数据库:

profile
pid | name

ptags
ptid | pid | tagid

tags
tagid | tag

数据库看起来像这样

profile
pid | name
 1    Randy
 2    Jeff
 3    Mike

ptags
ptid | pid | tagid
 1      1      1
 2      1      2 
 3      2      1
 4      2      3 
 5      3      1
 6      3      2
 7      3      3 

tags
tagid | tag
  1     science
  2     filosophy
  3     hydrology

我需要创建一个查询,显示配置文件中具有共享标签的名称和共享标签总数

即.

Results
Name  | Name2 | Count
Randy - Jeff - 1
Randy - Mike - 2
Jeff - Randy - 1
Jeff - Mike - 2 
Mike - Randy - 2
Mike - Jeff - 2

等等。

不知道我解释的对不对。

我读了

https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/

来自另一个与此类似的帖子的链接,但我无法理解它:)。

SQLFiddle:http://sqlfiddle.com/#!9/42bde6

最佳答案

在查询中使用连接:

SELECT p1.name Name1, p2.name Name2, Count(tagid)
FROM ptags AS t1
INNER JOIN ptags AS t2 ON t2.tagid = t1.tagid and t2.ptid <> t1.ptid 
INNER JOIN profile AS p1 ON p1.pid = t1.pid 
INNER JOIN profile AS p2 ON p2.pid = t2.pid 
GROUP BY p1.name, p2.name

如果一对名字只需要一行,那么试试这个:

SELECT p1.firstname Name1, p2.firstname Name2, Count(t1.tagid)
FROM profile_hashtags AS t1
INNER JOIN profile_hashtags AS t2 
  ON t2.tagid = t1.tagid and t2.pHid > t1.pHid 
INNER JOIN `profile` AS p1 ON p1.pid = t1.pid 
INNER JOIN `profile` AS p2 ON p2.pid = t2.pid 
GROUP BY p1.firstname, p2.firstname;

关于php - MySQL一对多关系,具有共享值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36656343/

相关文章:

php - 我可以在我的项目中使用 zend 翻译、日期和缓存作为独立类吗?

php - 我的框架是否应该允许同时访问 $_GET 和 $_POST?

php - doctrine2 在插入记录失败时增加我的主键

mysql - 如何在mysql中获取行id

php - 使用限制进行选择时出现未声明变量错误

php - 如何在飞行PHP框架上使用mysqli

php - PHP 中有没有一种方法可以捕获使用 POST 方法传递的所有信息

mysql - 无法使用 Fluent Migrator 更改具有主键的表

php - Mysql: 'order by Rand() Limit 4 ' 还是不是?

java - 使用c3p0池连接数据库mysql