Задать вопрос
@Gudzera

Навигация по датам mysql+php?

Нам нужно выбирать статьи из таблицы за определенные даты (числа), с этим понятно.
Но к этому всему нужно устроить навигацию, то есть выбор нужной даты (числа).

Задача:
1. Вид
10 11 12 13 14 15 16
Выделил жирным число за которое нам нужно выбрать информацию.


2. Выводить навигационные числа только в том случаи если статьи за эту дату существуют
3. Выводить 3 записи до выбранной даты и 3 после, если существуют.

Для себя нашел решение следующее: (но не совсем работающее)
$last_story = mysqli_fetch_array($mysqli->query("SELECT date FROM stories ORDER BY date DESC LIMIT 1"));
$date = date('Ymd', strtotime(date($last_story['date'])));

$previous = $mysqli->query("SELECT DISTINCT date FROM stories WHERE date<'".date('Y-m-d', strtotime(date($date)))."' ORDER BY date DESC LIMIT 3");
while($prev = mysqli_fetch_array($previous)) {
echo '<a href="?archive='.date('Ymd', strtotime($prev['date'])).'">'.date('d', strtotime($prev['date'])).'</a> ';
}

echo '<b>'.date('d', strtotime(date($date))).'</b> ';

$nexts = $mysqli->query("SELECT DISTINCT date FROM stories WHERE date>'".date('Y-m-d', strtotime(date($date)))."' ORDER BY date LIMIT 3");
while($next = mysqli_fetch_assoc($nexts)) {
echo '<a href="?archive='.date('Ymd', strtotime($next['date'])).'">'.date('d', strtotime($next['date'])).'</a> ';
}

Код любительский ;)

Результат:
12 11 10 13 14 15 16


Числа после выбранной даты выводит правильно, а вот перед этой датой выводит так сказать ЗАДОМ наперёд.
$previous = $mysqli->query("SELECT DISTINCT date FROM stories WHERE date<'".date('Y-m-d', strtotime(date($date)))."' ORDER BY date DESC LIMIT 3");

Все это потому что при выборке стоит "ORDER BY date DESC". Ставлю "ASC" - выбирает не правильно, так как идет от меньшей даты.

Что подскажите?
  • Вопрос задан
  • 213 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
BuriK666
@BuriK666
Компьютерный псих
$res = [];
while($prev = mysqli_fetch_array($previous)) {
$res[] =  '<a href="?archive='.date('Ymd', strtotime($prev['date'])).'">'.date('d', strtotime($prev['date'])).'</a> ';
}
echo implode('' ,array_reverse($res));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы