php – MySql查询作者和书籍计数

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – MySql查询作者和书籍计数脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我的数据库中有一本书(60,000本书)和作者(37,000位作者).一本书可能由多位作者撰写.因此,Book表在book表的author_id列中使用逗号分隔的author_ids
书桌

book_master_id      book_name       author_id
1                   Book 1          22,23
2                   Book 2          23
3                   Book 3          24
4                   Book 4          23,24

作者表

author_id   author_name 
22          Jim 
23          Roger   
24          Andrew

现在,如果我想将结果作为作者姓名,并按书写计数的降序排列.即

Roger(3)
Andrew(2)
Jim(1)

什么应该是MySQL查询???请告诉我步骤.
还要将执行时间视为最小值
谢谢

解决方法

您应该规范化数据库表,正如其他几个人已经提到的那样.结果数据库结构应如下所示:

BOOK_MASTER
book_master_id    book_name
1                 Book 1
2                 Book 2
3                 Book 3
4                 Book 4

AUTHOR
author_id         author_name 
22                Jim 
23                Roger   
24                Andrew 

BOOK_AUTHOR
book_master_id    author_id
1                 22
1                 23
2                 23
3                 24
4                 23
4                 24

您应该在数据库模式上设置正确的约束,但这会给您一个想法.

使用此数据库结构,您可以使用以下查询来获得所需的结果:

SELECT
    a.author_name,COUNT(*) as number_of_books
From
    author a
    JOIN book_author ba ON a.id = ba.author_id
group by
    a.author_name
ORDER BY number_of_books DESC

编写一个脚本,将当前书籍表的author_id逗号分隔列表移动到新的author_book表中应该是相当简单的,下面的内容可能会起作用:

<?PHP
$query = "SELECT book_master_id,author_id From books";
$result = MysqL_query($query);

while ($row = MysqL_fetch_row($result)) {
    $values = array();
    foreach (explode(',',$row['author_id']) as $authorId) {
        $values[] = "(" . $row['book_master_id'] . "," . $authorId . ")";
    }

    $query = "INSERT IGNORE INTO book_author (book_master_id,author_id) VALUES ";
    $query .= implode(',$values);

    MysqL_query($query);
}

请注意,我没有测试这段代码,你应该首先在测试数据库上试一试,看看它是否真的能够完成它应该做的事情.此外,如果您有大量数据,则此脚本可能需要一些时间才能执行.最后,也许有一个SQL查询可以做到一点,但这是第一个想到的解决方案.

脚本宝典总结

以上是脚本宝典为你收集整理的php – MySql查询作者和书籍计数全部内容,希望文章能够帮你解决php – MySql查询作者和书籍计数所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。