Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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/76.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/actionscript-3/6.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 跨多个表的复杂SQL查询_Mysql_Sql_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Mysql 跨多个表的复杂SQL查询

Mysql 跨多个表的复杂SQL查询,mysql,sql,ruby-on-rails,ruby-on-rails-3,Mysql,Sql,Ruby On Rails,Ruby On Rails 3,我有4张不同的桌子: 较量 反对 竞赛 获胜 竞赛有许多对象(通过竞赛对象)和奖金。比赛包含开始和结束日期 对象有许多竞赛(通过竞赛对象) 竞赛对象包含对象id、竞赛id、投票(竞赛结束日期后的多数投票为获胜者) 获奖者有竞赛id、金额和金额类型(美元和欧元) 我希望能够在尽可能少的SQL调用中访问此数据。更具体地说,我目前没有存储竞赛的获胜者,所以我一直在动态计算 我希望在编写SQL时能得到一些帮助: 总获胜金额(返回过去比赛中的总获胜金额) 总冠军欧元(返回过去比赛中赢得的总美元) al

我有4张不同的桌子:

  • 较量
  • 反对
  • 竞赛
  • 获胜

  • 竞赛有许多对象(通过竞赛对象)和奖金。比赛包含开始和结束日期

    对象有许多竞赛(通过竞赛对象)

    竞赛对象包含对象id、竞赛id、投票(竞赛结束日期后的多数投票为获胜者)

    获奖者有竞赛id、金额和金额类型(美元和欧元)


    我希望能够在尽可能少的SQL调用中访问此数据。更具体地说,我目前没有存储竞赛的获胜者,所以我一直在动态计算

    我希望在编写SQL时能得到一些帮助:

  • 总获胜金额(返回过去比赛中的总获胜金额)
  • 总冠军欧元(返回过去比赛中赢得的总美元)
  • all_won_竞赛(返回object为赢家的所有竞赛以及该竞赛的奖金,包括美元和欧元)

  • 代码我必须确定比赛的获胜者:

    SELECT "objects".* 
         FROM "objects" 
         INNER JOIN "contest_objs" ON "objects"."id" = "contest_objs"."object_id" 
         WHERE "contest_objs"."contest_id" = ? 
         ORDER BY votes DESC 
         LIMIT 1
    

    样本表数据:

    CREATE TABLE `contests` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `start_date` DATETIME,
    `end_date`  DATETIME,
    `user_id`  INT,
    `title` STRING
    ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
    
    CREATE TABLE `objects` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `name` STRING
    ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
    
    CREATE TABLE `winnings` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `contest_id` INT NOT NULL,
    `comment` TEXT,
    `amount_type` STRING NOT NULL,
    `amount` INT NOT NULL,
    `user_id`  DATETIME 
    ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
    
    CREATE TABLE `contest_objs` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `contest_id` INT NOT NULL,
    `object_id` INT NOT NULL,
    `votes` INT 
    ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
    
    INSERT INTO `objects` VALUES
    (1, "Foo"),
    (2, "Bar")
    
    INSERT INTO `contests` VALUES
    (1, "2012-09-16 23:30:16.220991", "2012-09-17 23:30:16.220991", 1, "Contest X"),
    (2, "2012-09-17 23:30:16.220991", "2016-09-17 23:30:16.220991", 2, "Contest Y")
    
    INSERT INTO `winnings` VALUES
    (1, 1, "Giving $5", 5, "dollars", 1),
    (2, 1, "Giving 2 euros", 2, "euros", 1),
    (3, 1, "Giving 4 euros", 4, "euros", 2),
    (4, 2, "Giving 2 euros to different contest", 2, "euros", 1)
    
    INSERT INTO `contest_objs` VALUES
    (1, 1, 1, 10),
    (2, 1, 2, 12),
    (3, 2, 2, 0),
    (4, 2, 2, 0)
    
    在上述示例中:


    竞赛X(结束)中有2个对象(foo和bar)。Bar以12票的优势在第X场比赛中获胜。酒吧在这场比赛中总共赢得了5美元和6欧元。

    我有SQL来确定比赛的获胜者。不知道如何将其包含到另一个语句中以解决上述问题。(以上更新)你能说明他们之间的关系吗?您是否只想获得上一次测试的总冠军?您是否还可以提供一些具有所需结果的记录?您是否可以以INSERT语句的形式(如中)共享CREATE TABLE语句和一些示例数据?抱歉,耽搁了!我手工添加了一些数据,希望格式可以理解。如果你有任何问题,请告诉我