2012-04-12 57 views
3

我想要做的是从MySQL数据库中的更新表中使用PHP获取条目。每个条目都附有一个时间戳。首先,我从时间戳中获取10个不同的日期,使用这10个唯一日期创建一个新数组(我这样做是因为fetchAll将日期放入多维数组中),然后执行另一个数据库调用来获取具有这些日期的所有条目。哪些可以返回超过10个条目。我希望它有10个不同的日期,而不是10个不同的时间戳。MySQL选择不同的日期,有限制的日期,但没有条目

例如,如果在2012-03-25从不同日期的第一个电话出现了,它可以找到:

2012-03-25 00:58:53 
2012-03-25 00:58:02 
2012-03-25 00:57:20 
2012-03-25 00:56:35 
2012-03-25 00:55:58 
2012-03-25 00:53:20 
2012-03-25 00:52:32 
2012-03-25 00:51:45 

由于时间戳是不同的。

这是我正在使用的当前代码,它的工作原理。

$test = $dbh->getArray("SELECT DISTINCT DATE_FORMAT(added, '%Y-%m-%d') AS added FROM db_updates ORDER BY added DESC LIMIT 0,10"); 

foreach ($test as $entry) { 
    list($date) = $entry; 
    $output[] = '\''.$date.'\''; 
} 

$test2 = $dbh->getArray("SELECT * FROM db_updates WHERE DATE_FORMAT(added, '%Y-%m-%d') IN (".implode(',', $output).") ORDER BY added DESC"); 

print_r($test2); 

返回33条结果。

只是万一有人问,我使用的是PDO,而不是php中的mysql函数。该代码是在这里:

public function getArray($query) { 
    $result = $this->db->query("$query"); 
    return $result->fetchAll(PDO::FETCH_NUM); 
} 

这一切都有效100%,它做我想做的事情。然而,我的问题是,如果只有一个mysql调用就可以做到这一点,所以我不必在中间循环调用两次。

我试图找出自己通过搜索谷歌,以及尝试和错误使用连接等无济于事。

回答

3

应该有INNER JOIN工作,你可以只使用DATE(added),而不是DATE_FORMAT()脱光了日期时间值的时间部分:

SELECT * 
FROM 
    db_updates 
    INNER JOIN (
    /* Subquery returns most recent 10 dates */ 
    SELECT DISTINCT DATE(added) AS added FROM db_updates ORDER BY added DESC LIMIT 0,10 
    /* JOIN between dates */ 
) datelist ON DATE(db_updates.added) = datelist.added 
ORDER BY db_updates.added DESC 
+0

完美。谢谢:)需要等7分钟才能接受这个答案。 – WMI 2012-04-12 02:21:55

相关问题