我要做的是使用php从mysql数据库中的更新表中获取条目。每个条目都附有一个时间戳。首先,我从时间戳中获取10个不同的日期,使用这10个唯一日期创建一个新数组(我这样做是因为fetchAll将日期放入多维数组中),然后执行另一个数据库调用,获取具有这些日期的所有条目。哪个可以返回10个以上的条目。我希望它有10个不同的日期,而不是10个不同的时间戳。
例如,如果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调用完成所有这些,所以我不必在中间调用两次循环。
我试图通过搜索谷歌来解决这个问题,并尝试使用联接进行反复试验,但无济于事。
答案 0 :(得分:3)
它应该与INNER JOIN
一起使用,您只需使用DATE(added)
代替DATE_FORMAT()
来删除DATETIME值的时间部分:
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