php – MySql查询作者和书籍计数
发布时间:2020-12-13 21:43:52 所属栏目:PHP教程 来源:网络整理
导读:我的数据库中有一本书(60,000本书)和作者(37,000位作者).一本书可能由多位作者撰写.因此,book表在book表的author_id列中使用逗号分隔的author_ids 书桌 book_master_id book_name author_id1 Book 1 22,232 Book 2 233 Book 3 244 Book 4 23,24 作者表 autho
我的数据库中有一本书(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查询可以做到这一点,但这是第一个想到的解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |