2011-10-04 17 views
1

选择的结果这是表的历史:基于日期,但知道ID

URL | UID | Method | Tag | Date 

而这个查询:

$data = mysql_query(" 
     select * from History 
     order by `Date` asc   
     "); 

我需要得到具有比创纪录的旧日期的URL。

我只有这条记录的网址。 ($ url)

有没有办法找到它并选择按日期排序的行?

我可以运行一个单独的查询与$url得到它的日期,但我想知道是否有可能做到一个查询。

回答

3

您可以使用子查询:

SELECT * 
FROM History 
WHERE Date < (SELECT Date FROM History WHERE url = 'foo') 
ORDER BY Date ASC 

产品添加了独特index到URL以确保该子查询只会返回一个记录。

+1

我还要补充'LIMIT 1'到嵌套查询 – zerkms

+0

@马克应该是'上面查询的执行date'场数据类型是什么? ? – diEcho

+0

@diEcho:没有限制。如果ORDER BY子句正常工作,那么WHERE也应该如此。我会建议日期时间。 –

0

这是一个更好的性能,然后子选择:

SELECT 
    h1.* 
FROM 
    history h1 
INNER JOIN 
    history h2 
ON 
    h2.url = '{URL}' 
WHERE 
    DATEDIFF(h1.`date`,h2.`date`) < 0