Php MYSQL语句:查找其他表中存在多少条记录多少次
我有两个数据库表: 表1:Php MYSQL语句:查找其他表中存在多少条记录多少次,php,mysql,Php,Mysql,我有两个数据库表: 表1: +---------+-------+-------------+ | Page | Title | Description | +---------+-------+-------------+ | Apple | ..... | ........... | | Orange | ..... | ........... | | Pear | ..... | ........... | | Grapes | ..... | ...........
+---------+-------+-------------+
| Page | Title | Description |
+---------+-------+-------------+
| Apple | ..... | ........... |
| Orange | ..... | ........... |
| Pear | ..... | ........... |
| Grapes | ..... | ........... |
+---------+-------+-------------+
表2:
+----------+-------------+
| Link | Page |
+----------+-------------+
| Website1 | Apple |
| Website2 | Orange |
| Website3 | Apple |
| Website4 | Orange |
| Website5 | Apple |
| Website6 | Pear |
| Website7 | Apple |
| Website8 | Grapes |
| Website9 | Grapes |
+----------+-------------+
我想知道/返回表1中有多少页在表2中被引用,以及它们被引用了多少次。(我不想知道表1中的每一页在表2中引用了多少次)
所以在这个例子中:
1页被引用1次(Pear),
2页参考2次(葡萄和橙色)&
1页被引用4次
我将使用什么样的SQL语句来获取此信息?下面的查询应该执行
SELECT COUNT(1) NoOfPages,CNT ReferencedTimes
FROM
(
SELECT T2.PAGE,COUNT(1) CNT
FROM TABLE1 T1 INNER JOIN TABLE2 T2 ON T1.PAGE = T2.PAGE
GROUP BY T2.PAGE
)T
GROUP BY CNT
我认为以下说法是合适的:
SELECT count(*) FROM Table2 WHERE (Table2.Page IN (SELECT Page FROM Table1));
希望这有帮助
使用此查询
如果您要查找的是X页被引用了N次,那么下面的查询将实现:
SELECT COUNT(t1.page), t2.count
FROM table1 t1
INNER JOIN (SELECT page,COUNT(*) AS count FROM table2 GROUP BY page) t2 ON t1.page=t2.page
GROUP BY t2.count
尝试此查询,它将创建一个左联接,并告诉您表2中的项被引用了多少次,如果计数为零,则表示另一个表中没有引用
SELECT table1.Page, count(table2.Page) as count
FROM table1
LEFT JOIN table2 ON table2.Page = table1.Page
GROUP BY table1.Page
您似乎遗漏了一个细节“(我不想知道表1中的每一页在表2中引用了多少次)。”可能。但是我太懒了,无法详细地分析它=)至于我,你的查询对于这么简单的任务来说太重太复杂了。请考虑我的答案在下面,我认为它将适合,它更容易理解。在做了一个小小的改动后,这个功能运行得非常好:我将“selectt2.PAGE,COUNT(1)CNT”更改为:selectt1.PAGE,COUNT(1)CNT”。
SELECT COUNT(t1.page), t2.count
FROM table1 t1
INNER JOIN (SELECT page,COUNT(*) AS count FROM table2 GROUP BY page) t2 ON t1.page=t2.page
GROUP BY t2.count
SELECT table1.Page, count(table2.Page) as count
FROM table1
LEFT JOIN table2 ON table2.Page = table1.Page
GROUP BY table1.Page