Mysql 跨多个表的复杂SQL查询
我有4张不同的桌子: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
竞赛有许多对象(通过竞赛对象)和奖金。比赛包含开始和结束日期 对象有许多竞赛(通过竞赛对象) 竞赛对象包含对象id、竞赛id、投票(竞赛结束日期后的多数投票为获胜者) 获奖者有竞赛id、金额和金额类型(美元和欧元)
我希望能够在尽可能少的SQL调用中访问此数据。更具体地说,我目前没有存储竞赛的获胜者,所以我一直在动态计算 我希望在编写SQL时能得到一些帮助:
代码我必须确定比赛的获胜者:
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语句和一些示例数据?抱歉,耽搁了!我手工添加了一些数据,希望格式可以理解。如果你有任何问题,请告诉我