2013-06-20 26 views
0

我有一個查詢按最新新聞故事順序列出主題公園。查詢如下。通過未按日期正確排序的組

$sql2 = 'SELECT tpf_news.park_id, name 
FROM tpf_news 
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id GROUP BY name ORDER BY date DESC ' ; 
$result2 = $pdo->query($sql2); 

這是工作正常,直到一個主題公園有超過一個的新聞報道,被分組的日期是舊日期,而不是新的,因此主題公園將保持在原來的位置,不要輕易的頂部附有新故事時的清單。我如何更改查詢,以便最近的日期完成分組?

如果需要,下面是顯示數據的PHP foreach。

<?php foreach ($result2 as $row2): ?> 
<h4> 
<a class="bloglink" href="parknews.php?park_id=<?php echo $row2['park_id'];?>"> 
<?php echo $row2['name']; ?> 
</a> 
</h4> 
<br> 


<?php endforeach; ?> 

感謝

+2

是什麼'date'的數據類型?你會想按照'date'的順序降序排列,最近的排在第一位。如果日期字段不是日期類型,請將其轉換爲:'ORDER BY STR_TO_DATE(date)DESC' – binnyb

+0

數據類型爲日期。這是所有工作,直到一個主題公園有兩個日期。我必須對結果進行分組,因爲每個公園只應在列表中列出一次 – themeparkfocus

+0

如果數據類型爲「日期」將其更改爲「日期時間」。也可以在group by子句中使用自動增量或PK。 –

回答

0

你是不是選擇一個日期,所以本質上它會使用「隨機」的日期。你可以嘗試像這樣選擇:

SELECT MAX(date) thedate, tpf_news.park_id, name 
FROM tpf_news 
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id GROUP BY name ORDER BY thedate DESC 

這將選擇每個組(名稱)內的最大日期,然後按這些日期排序。

+0

日期實際上並未顯示,它只是公園名稱。日期DESC只是爲了得到正確的訂購 – themeparkfocus

+0

是的,但你仍然需要指定你想要的最新日期,因爲那是你想要比較的日期。您不必在「foreach」中使用它。 – MaX

0

我的工作了:

$sql2 = 'SELECT tpf_news.park_id, name 
FROM tpf_news 
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id GROUP BY name 

ORDER BY min(STR_TO_DATE(date, "%Y-%m-%d"))' 

這似乎做的工作。 感謝

+0

如果您的數據按正確的順序巧妙地運行,按照mysql查看colums的順序,最新日期最新的條目,這將起作用。但是,如果這變得不一致,您只需爲每個分組獲得一個隨機日期。 – MaX

0
SELECT tpf_news.park_id, name 
FROM tpf_news 
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id 
GROUP BY name ORDER BY date DESC, **(AutoIncrement_Field)** DESC 

希望這將有助於..