Поддержка Проблемы и решения Не правильная работа архива

  • Решено s4aa19

    (@s4aa19)


    Здравствуйте, уважаемые форумчани!
    У меня проблема з виджетом Архив, то есть если нажать на какой-то месяц, то отображаются все посты, которые были написаны в этом месяце и всех предыдущих! А надо что бы, только те, что в этом месяце. Точно также и с днями!
    Если захожу под своим логином и паролем, то всё работает отлично, а если не залогиненый пользователь, то не работает!
    Например, я блог веду с июня, а если нажимаю на август, то отображаются посты c август, июль и июнь, хотя должны только за август.
    Помогите, кто знает что надо сделать! Я уже обновлял WordPress вручную была версия 2.8.6 обновил до 2.9.2, но ничего не помогло и менял темы, но всё тоже самое!

Просмотр 15 ответов — с 31 по 45 (всего 60)
  • Если я всё правильно сделал, то мне выдало #1046 — No database selected

    Я понял, что не выбрал базу данных

    При таком запросе выдало мне 6 постов, 2 за август и 4 последних за июль!
    Я так понимаю это потому, что на одной странице 6 постов!

    И что далее с этим всем делать?

    А от запрос:

    SELECT post_title, DAYOFMONTH(post_date) as dom FROM wp_posts WHERE YEAR(post_date) = ‘2010’ AND MONTH(post_date) = ’08’ AND post_date < ‘2010-10-20 18:34:08’ AND post_type = ‘post’ AND post_status = ‘publish’

    Отбирает те посты что надо!
    Но я всё равно не понимаю в чём проблема!

    Модератор Юрий

    (@yube)

    и 4 последних за июль!

    Я правильно понял, что у четырех постов в поле post_date было 2010-07-… при том, что в запросе указано MONTH(wp_posts.post_date)=’8′?

    Попробуйте еще раз, уже «краткую» версию
    SELECT post_date FROM wp_posts WHERE MONTH(post_date)=’8′ ORDER BY post_date

    Должны вывестить только даты/время и только такие: год-08-число время

    Модератор Юрий

    (@yube)

    Стоп!

    Пробуем «полный» запрос с MONTH(post_date) = ‘08′ и MONTH(post_date) = ‘8’ (отличаются нулем).

    И с MONTH(post_date) = ’08’ и MONTH(post_date) = ‘8’ выдаёт тот же результат 6 постов из них два за август и черыре за июль!

    у четырех постов в поле post_date было 2010-07-…

    всё так, вы правильно поняли!
    Если пробовать короткий вариант

    SELECT post_date FROM wp_posts WHERE MONTH(post_date)=’8′ ORDER BY post_date

    То выдаёт, толька за август эти два поста, но список состоит из 20 строк, которые отличаются только временем, а число тоже!
    То есть один пост 2010-08-17 и там этого числа, наверно, было несколько изминений в разное время, то все они есть в списке, то же самое и с 2010-08-30

    Модератор Юрий

    (@yube)

    Хорошо. Выходит, что-то мешает. Будем вычислять по одному. Первый подозреваемый — SQL_CALC_FOUND_ROWS.

    Попробуйте
    1. SELECT post_date FROM wp_posts WHERE MONTH(post_date)=’8′ ORDER BY post_date

    2. SELECT SQL_CALC_FOUND_ROWS post_date FROM wp_posts WHERE MONTH(post_date)=’8′ ORDER BY post_date

    Смотрим только на дату. То что в выборку попадут и ревизии, и аттачи, нас сейчас не интересует.

    Хотя, если честно, у меня есть сомнения, что даже если мы вычислим причину бага с точностью до миллиметра, хостер признает, что это его mysql работает не правильно, скорее всего, он сделает как все — скажет, что кривой движок. Аргумент «на тысячах других серверов точно такой же движок работает» обычно игнорируется. Но в любом случае, Вы получите ценный опыт 🙂

    В обоих случаях выдаёт правильные даты!

    Что далее?

    Atrax

    (@atrax)

    Ethical engineer

    на всякий случай — mysql repair пробовали?

    А что такое mysql repair ?

    Модератор Юрий

    (@yube)

    Наш полный запрос

    SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts WHERE 1=1 AND YEAR(wp_posts.post_date)=’2010′ AND MONTH(wp_posts.post_date)=’8′ AND wp_posts.post_type = ‘post’ AND (wp_posts.post_status = ‘publish’) ORDER BY wp_posts.post_date DESC LIMIT 0, 7

    выдает лишнее, правильно?

    Выкидываем из него отдельные части и пытаемся поймать ту, которая мешает. Я немного помогу, раздербанив на части-строки

    SELECT SQL_CALC_FOUND_ROWS wp_posts.*
    FROM wp_posts
    WHERE 1=1
    AND YEAR(wp_posts.post_date)=’2010′
    AND MONTH(wp_posts.post_date)=’8′
    AND wp_posts.post_type = ‘post’
    AND (wp_posts.post_status = ‘publish’)
    ORDER BY wp_posts.post_date DESC
    LIMIT 0, 7

    SELECT и FROM, разумеется, стоит оставить :))))))

    Главное правило в этом деле: не более одного изменения за один раз.

    Ах, да, чуть не забыл. В mysql, как и в php, «диез»(#) в начале строки превращает всю строку в комментарий, т.е. она выполняться не будет. Иногда так гораздо проще ловить преступника 🙂

    Модератор Юрий

    (@yube)

    А что такое mysql repair ?

    В закладке «операции» пункт «восстановить таблицу».

Просмотр 15 ответов — с 31 по 45 (всего 60)
  • Тема «Не правильная работа архива» закрыта для новых ответов.