Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将每个国家的前10本书装入单独的表格。。。?_Mysql_Sql - Fatal编程技术网

Mysql 将每个国家的前10本书装入单独的表格。。。?

Mysql 将每个国家的前10本书装入单独的表格。。。?,mysql,sql,Mysql,Sql,我有三张桌子 TABLE #1 "users" 3 columns User-ID int (11) Location varchar (250) Age int (11) Primary-key (User-ID) TABLE #2 "books" 5 columns ISBN varchar (13) Book-title varchar(255) Book-author varchar (255) Year-of-publication int(10) Publisher varc

我有三张桌子

TABLE #1 "users"
3 columns 
User-ID int (11)
Location varchar (250)
Age int (11)
Primary-key (User-ID)

TABLE #2 "books"
5 columns 
ISBN varchar (13)
Book-title varchar(255)
Book-author varchar (255)
Year-of-publication  int(10)
Publisher varchar (255)

TABLE #3 "Book-raitings"
3 columns
User-ID int (11)
ISBN varchar (13)
Book-rating int (11)
Primary-key (user-id, ISBN)
位置列
varchar
的格式为(
城市、州、国家

我必须将每个国家的前10本书编入一个单独的表格。生成SQL转储


提前感谢您的帮助。

一些初步建议:

  • 不要在MySql变量名中使用-in。它将强制使用以下语法:
    'Book-ratings'
    'Book-ratings'
    而不是:
    Book-ratings.Book-ratings
    减号是MySql中的一个运算符
  • 遗憾的是,您将位置设置为逗号分隔的值序列。如果有3个字段:城市、州、国家,会更好。这将强制进行复杂的字符串处理,这是一个限制因素
  • 您可以通过以下方式创建包含国家/地区的表:

    CREATE TABLE books_by_country 
    SELECT 
    `Book-ratings`.`Book-rating`,
    `books`.`Book-title`,
    REPLACE(`users`.`Location`,CONCAT(SUBSTRING_INDEX(`users`.`Location`, ',', 2),', '),'') as Country
    FROM `Book-ratings`
    LEFT JOIN `books` ON `books`.`ISBN` = `Book-ratings`.`ISBN`
    LEFT JOIN `users` ON `Book-ratings`.`User-ID` = `Book-ratings`.`User-ID`;
    
    SELECT
    `books_by_country`.`Country`,
    `books_by_country`.`Book-title`,
    SUM(`books_by_country`.`Book-rating`) as Book_ranking
    FROM `Test`.`books_by_country`
    WHERE `books_by_country`.`Country`= 'USA'
    Group BY `books_by_country`.`Country`,`books_by_country`.`Book-title`
    ORDER BY Book_ranking DESC
    LIMIT 10;
    
    从中,您可以通过以下方式为每个国家挑选前10本书:

    CREATE TABLE books_by_country 
    SELECT 
    `Book-ratings`.`Book-rating`,
    `books`.`Book-title`,
    REPLACE(`users`.`Location`,CONCAT(SUBSTRING_INDEX(`users`.`Location`, ',', 2),', '),'') as Country
    FROM `Book-ratings`
    LEFT JOIN `books` ON `books`.`ISBN` = `Book-ratings`.`ISBN`
    LEFT JOIN `users` ON `Book-ratings`.`User-ID` = `Book-ratings`.`User-ID`;
    
    SELECT
    `books_by_country`.`Country`,
    `books_by_country`.`Book-title`,
    SUM(`books_by_country`.`Book-rating`) as Book_ranking
    FROM `Test`.`books_by_country`
    WHERE `books_by_country`.`Country`= 'USA'
    Group BY `books_by_country`.`Country`,`books_by_country`.`Book-title`
    ORDER BY Book_ranking DESC
    LIMIT 10;
    

    你能把连字符改成下划线吗。我一直在想你在试着减法。说到家庭作业,我们通常需要更多的努力。谢谢你,我确实注意到了后面的连字符。这实际上是我在网上看到的一个例子,我想试着去理解非硬件。我感谢你的快速回答。白羽,非常感谢你的帮助。我确实改变了我的一个可能的解决方案——位置字符串,将州、市、国分开——这样做要容易得多,但如果不将它们分开,我想不出怎么做。我真的很感谢你的帮助。罗斯玛丽,如果你在答案上打勾或投票的话,我会非常感激的。