Я думаю, вам нужно будет сделать это только на PHP. Группирование в SQL обычно используется для таких вещей, как SUM, AVG, MAX, MIN, COUNT и т. Д. Он не влияет на фактический набор записей, чтобы показать какую-то группировку, к которой вы можете обращаться в PHP.
То, что я сделал в подобных ситуациях, - это переменная, которую нужно отслеживать в цикле, чтобы узнать, когда я попаду в новую группу. Для вашего SQL вы сделаете:
SELECT `title`, `description`, `date_added`
FROM one_liners WHERE `status`=1 ORDER BY MONTH date_added DESC
Тогда в PHP вы сделаете:
$prevMonth = '';
while ($row = mysql_fetch_assoc($result)) {
$currMonth = $row['date_added'];
if ($currMonth != $prevMonth) {
if ($prevMonth != '') {
echo '</dl>';
}
echo '<dl><dt>' . $currMonth . '</dt>';
$prevMonth = $currMonth;
}
echo '<dd><strong>' . $row['title'] . '</strong>';
echo ' - ' . $row['description'] . '</dd>';
}
if (mysql_num_rows($result) > 0) {
echo '</dl>';
}
Все это действительно делает это, отслеживая месяц из предыдущей строки, пока вы просматриваете цикл. Когда вы доберетесь до нового, он закроет старый DL и откроет новый.
В зависимости от того, как вы храните свои даты в БД (отметка времени или дата / время), вам нужно заменить $currMonth = $row['date_added'];
на соответствующий код, чтобы преобразовать его в формат «август 2009» или что вы хотите.