2012-04-12 80 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

相關問題