Если я всё правильно сделал, то мне выдало #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 ?
В закладке «операции» пункт «восстановить таблицу».