PHP-MySQL按不同的日期选择,有日期限制,但没有条目

我正在尝试使用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调用来完成所有这些操作,因此我不必在中间用循环调用两次.

我试图通过搜索谷歌自己找出来,并尝试使用联接的尝试和错误,但无济于事.

解决方法:

它应该与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
上一篇:Kotlin:【set集合】集合创建、可变集合mutableSetOf、集合转换(List转换成Set,去掉重复元素)、distinct快捷去重函数、数组


下一篇:MYSQL Advanced选择不在表中的具有相应ID的不同值