我有一个看起来像这样的“输入”表:
id subId surveyId name val
1 1 1 Ip Addr 123.456.789
2 1 1 Cookie abcdefghij
3 1 1 Time 2012-06-05 22:14:30
4 2 1 Ip Addr 123.456.789
5 2 1 Time 2012-06-05 22:14:40
subId
是提交 ID 的缩写。我想survId
在指定时间后获得所有特定的提交。有2个步骤。首先,获取特定时间后的所有提交 ID。这可以像这样完成:
SELECT subId FROM Inputs WHERE surveyId=1 AND name='Time' AND val>'2012-06-05 22:14:35';
接下来,获取这些提交的所有行:
SELECT * FROM Inputs WHERE subId IN (...);
当我用...
第一个查询的结果替换时,一切正常。它返回最后 2 行(id 4 和 5)。这是EXPLAIN
查询1:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Inputs range Inputs_ix1 Inputs_ix1 1030 (null) 3 Using where
和查询2:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Inputs range Inputs_ix2 Inputs_ix2 4 (null) 30 Using where
当我对它们进行分析时,它们在 10,000 行上总共需要大约 1 毫秒。到现在为止还挺好。但是,我想将它们结合在一起。这是我尝试过的:
SELECT * FROM Inputs WHERE subId IN (SELECT subId FROM Inputs WHERE surveyId=1 AND name='Time' AND val>'2012-06-05 22:14:35');
这大约需要 200 毫秒!我认为这是由于一个错误。所以让我们试试别的东西:
SELECT (@ids:=subId) FROM Inputs WHERE surveyId=1 AND name='Time' AND val>'2012-06-05 22:14:35';
SELECT @ids;
在这里,我试图@ids
用第一个查询的结果创建一个变量。但是,只有最后一个 id 存储在变量中。MySQL 变量不能与数组一起使用吗?!
谁能帮我?