Php MYSQL语句:查找其他表中存在多少条记录多少次

Php MYSQL语句:查找其他表中存在多少条记录多少次,php,mysql,Php,Mysql,我有两个数据库表: 表1: +---------+-------+-------------+ | Page | Title | Description | +---------+-------+-------------+ | Apple | ..... | ........... | | Orange | ..... | ........... | | Pear | ..... | ........... | | Grapes | ..... | ...........

我有两个数据库表:

表1:

+---------+-------+-------------+
| 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