Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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从符合条件的行中选择字段,并从上面的行中选择字段_Mysql_Database - Fatal编程技术网

MySQL从符合条件的行中选择字段,并从上面的行中选择字段

MySQL从符合条件的行中选择字段,并从上面的行中选择字段,mysql,database,Mysql,Database,我有一个数据表的结果,我想选择的信息,这主要是对记录有关的第二名完成 例如,比赛的地点,比赛的日期,以及胜利者的时间差距 但我想在我的查询中显示的是获胜者,然后是他们的获胜保证金,这实际上是根据与第二名获得者相关的记录存储的 例如: id | race_id | result | Entrant | Time ---|---------|--------|---------------|------ 0 | 001 | 1 | Huw Edwards | 54

我有一个数据表的结果,我想选择的信息,这主要是对记录有关的第二名完成

例如,比赛的地点,比赛的日期,以及胜利者的时间差距

但我想在我的查询中显示的是获胜者,然后是他们的获胜保证金,这实际上是根据与第二名获得者相关的记录存储的

例如:

id | race_id | result | Entrant       | Time
---|---------|--------|---------------|------
0  |   001   |    1   | Huw Edwards   | 54:78.491
1  |   001   |    2   | Fiona Bruce   | 0.250
2  |   001   |    3   | Sophie Raworth| 3.114
3  |   001   |    4   | George Alagiah| 6.756
4  |   001   |    5   | Mishal Husain | 42.452
5  |   001   |    6   | Peter Sissons | 58.004
6  |   002   |    1   | Fiona Bruce   | 43:08.549
7  |   002   |    2   | Sophie Raworth| 5.439
8  |   002   |    3   | Mishal Husain | 5.444
9  |   002   |    4   | Huw Edwards   | 6.007
10 |   002   |    5   | Peter Sissons | 13.000
11 |   002   |    6   | George Alagiah| 2:12.782
我尝试过这样的查询(未按预期工作):

我想以如下的结果结束,因为它显示了Huw Edwards所享有的获胜优势

id | race_id | entrant     | time
---|---------|-------------|-------
 1 |  001    | Huw Edwards | 0.250
 7 |  002    | Fiona Bruce | 5.439
以下是我的表模式:

CREATE TABLE `races` (
 `series` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
 `year` int(11) NOT NULL,
 `round` int(11) NOT NULL,
 `date` date NOT NULL,
 `race_id` text COLLATE utf8_unicode_ci NOT NULL,
 `track` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
 `result` int(11) NOT NULL,
 `number` int(11) NOT NULL,
 `class` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
 `class_pos` int(11) NOT NULL,
 `runner` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
 `runner_id` int(11) NOT NULL,
 `runner2` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
 `runner_id2` int(11) NOT NULL,
 `entrant` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
 `laps` int(11) NOT NULL,
 `time` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
 `best` text COLLATE utf8_unicode_ci NOT NULL,
 `qual` int(11) NOT NULL,
 `marque` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
 `id` int(11) NOT NULL AUTO_INCREMENT,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=43021 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

您可以使用相关查询:

select id, entrant, (
    select time
    from races x
    where race_id = races.race_id AND result = 2
) as win_margin
from races
where result = 1

您可以使用相关查询:

select id, entrant, (
    select time
    from races x
    where race_id = races.race_id AND result = 2
) as win_margin
from races
where result = 1

您的查询看起来非常接近,您只需要使用正确的别名-因此您需要r1.time和r1.result,或者r.time和r.result

SELECT r.id, r.entrant, r1.time 
FROM races as r 
LEFT JOIN races as r1 
ON r1.id > r.id 
WHERE r1.result = "2"

您的查询看起来非常接近,您只需要使用正确的别名-因此您需要r1.time和r1.result,或者r.time和r.result

SELECT r.id, r.entrant, r1.time 
FROM races as r 
LEFT JOIN races as r1 
ON r1.id > r.id 
WHERE r1.result = "2"

你想要什么还不是100%清楚

请提供更多其他预期结果的示例。 到目前为止,让您了解如何获取所需数据:

更新您的表架构太糟糕了。为了加快我对您的表的查询速度,您至少应该更改
race\u id
列类型integer(或varchar),而不是text!然后您需要在
result
race\u id
列上创建索引:

ALTER TABLE races MODIFY race_id INTEGER; 

CREATE INDEX result_race_id ON races (result, race_id); 

你想要什么还不是100%清楚

请提供更多其他预期结果的示例。 到目前为止,让您了解如何获取所需数据:

更新您的表架构太糟糕了。为了加快我对您的表的查询速度,您至少应该更改
race\u id
列类型integer(或varchar),而不是text!然后您需要在
result
race\u id
列上创建索引:

ALTER TABLE races MODIFY race_id INTEGER; 

CREATE INDEX result_race_id ON races (result, race_id); 


这真的不足以帮助你。比赛ID存储在哪里?这是你提问的必要部分。你的问题的逻辑是什么?不清楚。如果您还没有计算出比赛ID,它将存储在表“races”中……您的表结构如何支持多个比赛?为了简单起见,本例中还没有包含一个比赛ID字段。这并没有足够的信息来帮助您。比赛ID存储在哪里?这是你提问的必要部分。你的问题的逻辑是什么?不清楚。如果您没有计算出比赛ID,则比赛ID存储在表“races”中……您的表结构如何支持多个比赛?为了简单起见,本例中也包含一个比赛ID字段。赛后x的用途是什么?它只是一个别名吗?没有它似乎可以正常工作。是的,它是一个别名。如果您想参考外部表格(例如,
x.raceid=races.raceid
),那么在比赛后使用x的目的是什么?它只是一个别名吗?没有它似乎可以正常工作。是的,它是一个别名。如果您想引用外部表格(例如,
x.raceid=races.raceid
),它将非常有用。我现在编辑了我的问题,并意识到我应该包含每个种族的唯一标识符。希望从select语句中添加第二个预期结果行会有所帮助。我在这个线程中尝试了一些响应,但它们似乎需要比预期更长的时间来处理。谢谢编辑。现在,我在phpmyadmin中约42000行的数据表上运行了这个查询,但查询大约需要55秒。在42k的数据集上,它是否会运行缓慢?请提供您的表模式:
SHOW CREATE table races?天哪<代码>'time'varchar(256)
为什么?它有时包含注释。我现在编辑了我的问题,意识到我应该包含每个种族的唯一标识符。希望从select语句中添加第二个预期结果行会有所帮助。我在这个线程中尝试了一些响应,但它们似乎需要比预期更长的时间来处理。谢谢编辑。现在,我在phpmyadmin中约42000行的数据表上运行了这个查询,但查询大约需要55秒。在42k的数据集上,它是否会运行缓慢?请提供您的表模式:
SHOW CREATE table races?天哪<代码>'time'varchar(256)
为什么?它有时包含注释。