2014-05-17 62 views
0

我需要在另一个select中使用select id,但我不知道该怎么办?我的想法是这样的:如何在mysql查询中使用select另选select(Sub-Query)?

$query10 = "SELECT id FROM $database_table WHERE UTCdate >= '{$from_date}' AND satellite_derived_time >= CAST('{$from_time}' AS UNSIGNED)"; 

$query20 = "SELECT id FROM $database_table WHERE UTCdate >= '{$to_date}' AND satellite_derived_time >= CAST('{$to_time}' AS UNSIGNED)"; 


$query = "SELECT * FROM $database_table WHERE id BETWEEN '$query10' AND '$query20'"; 

回答

1

使用JOIN的

SELECT t.* 
FROM $database_table AS tfrom 
JOIN $database_table AS tto 
JOIN $database_table AS t ON t.id BETWEEN tfrom.id AND tto.id 
WHERE tfrom.UTCdate >= '$from_date' AND tfrom.satellite_derived_time >= CAST('$from_time' AS UNSIGNED) 
AND tto.UTCdate >= '$to_date' AND tto.satellite_derived_time >= CAST('$to_time' AS unsigned) 

或使用子查询:

SELECT * 
FROM $database_table 
WHERE id BETWEEN (SELECT id FROM $database_table WHERE UTCdate >= '{$from_date}' AND satellite_derived_time >= CAST('{$from_time}' AS UNSIGNED)) 
      AND (SELECT id FROM $database_table WHERE UTCdate >= '{$to_date}' AND satellite_derived_time >= CAST('{$to_time}' AS UNSIGNED)) 
+0

查询failedsubquery返回不止一行。 – UserMat

+0

我觉得有一个问题,它显示我上面的消息。我使用第二种方法(子查询)。 – UserMat

+0

您的原始代码意味着'$ query10'和'$ query20'中只能有一个值。如何处理多个ID?如果可以有多个ID,则您的原始代码无意义。 – Barmar