Не везде выполняются запросы к базе

yura

Гуру форума
Регистрация
5 Апр 2006
Сообщения
466
Реакции
69
Всем привет!

У меня проблема с ДЛЕ и его базой. Ранее я уже создавал тему в разделе по ДЛЕ ( Для просмотра ссылки Войди или Зарегистрируйся ) однако там пришли к выводу, что с самим ДЛЕ все ОК и проблема в базе...

Проблема в том, что в некоторых новостях не выводятся похожие новости. Айди похожих новостей ДЛЕ хранит в поле related_ids таблицы dle_post_extras. При очистке кеша похожих новостей в админке все поля с айди похожих новостей очищаются. Когда же пользователь заходит в новость - ДЛЕ отправляет в базу запрос есть ли что-то в поле related_ids. Если нет - в него вписываются айди похожих новостей.

НО... Вписываются они не всегда :( По личным наблюдениям проблема присуща в основном "старым" новостями либо новым новостям из старых категорий. Дело в том, что сайту примерно 8 лет и первоначально он создавался еще на ДЛЕ версий 7.х после чего постепенно обновлялся до 10.х. Грешу на то, что при всех этих обновлениях в базе что-то "нарушилось".

Включал логирование мускула. Фрагмент с лога при котором похожие новости не вписались
Код:
  140 Connect dle_user@localhost on base
    140 Query SET NAMES 'cp1251'
    140 Query SELECT category FROM dle_post where  id = '3121' AND approve
    140 Query SELECT * FROM dle_users WHERE user_id='1'
    140 Query SELECT * FROM dle_post LEFT JOIN dle_post_extras ON (dle_post.id=dle_post_extras.news_id) WHERE  id = '3121'
    140 Query UPDATE dle_post_extras SET news_read=news_read+1 WHERE news_id='3121'
    140 Query SELECT id, date, short_story, xfields, title, category, alt_name FROM dle_post WHERE category regexp '[[:<:]](272)[[:>:]]' AND MATCH (title, short_story, full_story, xfields) AGAINST ('ТАЙТЛ НОВОСТИ ') AND id != 3121 AND approve=1 AND date < '2015-12-26 20:22:23' LIMIT 4
    140 Quit
А тут все вписалось
Код:
     89 Connect db_user@localhost on base
     89 Query SET NAMES 'cp1251'
     89 Query SELECT category FROM dle_post where  id = '830' AND approve
     89 Query SELECT * FROM dle_post LEFT JOIN dle_post_extras ON (dle_post.id=dle_post_extras.news_id) WHERE  id = '830'
     89 Query UPDATE dle_post_extras SET news_read=news_read+1 WHERE news_id='830'
     89 Query SELECT id, date, short_story, xfields, title, category, alt_name FROM dle_post WHERE category regexp '[[:<:]](137)[[:>:]]' AND MATCH (title, short_story, full_story, xfields) AGAINST ('Tuning Ford Focus Tuning Ford Focus ST') AND id != 830 AND approve=1 AND date < '2015-12-26 20:21:58' LIMIT 4
     89 Query UPDATE dle_post_extras SET related_ids='836,837,835,832' WHERE news_id='830'
     89 Quit
Выполнил в пхпмайадмин запрос который вписывает айди похожих
Код:
UPDATE dle_post_extras SET related_ids='4,5,7,8' WHERE news_id='6'
Вписалось.
Выполнил еще такой запрос
Код:
SELECT id, date, short_story, xfields, title, category, alt_name FROM dle_post WHERE category regexp '[[:<:]](272)[[:>:]]' AND MATCH (title, short_story, full_story, xfields) AGAINST ('ТАЙТЛ НОВОСТИ ') AND id != 3121 AND approve=1 AND date < '2015-12-26 20:22:23' LIMIT 4
Пустой результат, т.е. ноль строк. Новости с айди 3121 и 6, о которых упоминалось в запросах, как раз из числа проблемных где похожие новости не выводятся.

Помогите пожалуйста. Куда копать?
 
а что подставляется, по коду там где 272? id?

ну и как вариант, попробуй удалить:
Код:
category regexp '[[:<:]](272)[[:>:]]' AND
Думаю что проблема в этой строке, не понимаю почему регуляркой по id категории ищется.

Без регэскпа должен искать по всем категориям
 
272 это айди категории. В настройках ДЛЕ включен выбор похожих новостей из той-же категории, что и сама новость.
 
272 это айди категории. В настройках ДЛЕ включен выбор похожих новостей из той-же категории, что и сама новость.
тогда я не понимаю зачем там regexp, почему не сделать более быстрый:
Код:
WHERE category=272 AND MATCH ...
?
 
Эм... поищу какой код генерит этот запрос и попробую..

Все равно не понятно почему не работает только в некоторых новостях... А в остальных (% наверное 80-90) все ок
 
Подправил чуть код ДЛЕ. Теперь в логах когда все ок такое
Код:
      120 Connect    dle_user@localhost on dle
          120 Query    SET NAMES 'cp1251'
          120 Query    SELECT category FROM dle_post where  id = '3225' AND approve
          120 Query    SELECT * FROM dle_post LEFT JOIN dle_post_extras ON (dle_post.id=dle_post_extras.news_id) WHERE  id = '3225'
          120 Query    UPDATE dle_post_extras SET news_read=news_read+1 WHERE news_id='3225'
          120 Query    SELECT id, date, short_story, xfields, title, category, alt_name FROM dle_post WHERE id IN(3104,3103,3222,3194) ORDER BY id DESC
          120 Quit
А когда все не ок такое
Код:
           31 Connect    dle_user@localhost on dle
           31 Query    SET NAMES 'cp1251'
           31 Query    SELECT category FROM dle_post where  id = '6' AND approve
           31 Query    SELECT * FROM dle_users WHERE user_id='1'
           31 Query    SELECT * FROM dle_post LEFT JOIN dle_post_extras ON (dle_post.id=dle_post_extras.news_id) WHERE  id = '6'
           31 Query    UPDATE dle_post_extras SET news_read=news_read+1 WHERE news_id='6'
           31 Query    SELECT id, date, short_story, xfields, title, category, alt_name FROM dle_post WHERE category=41 AND MATCH (title, short_story, full_story, xfields) AGAINST ('ТАЙТЛ') AND id != 6 AND approve=1 AND date < '2016-01-05 03:56:41' LIMIT 4
           31 Quit
Т.е. в плане результата не поменялось ровным счетом ничего
 
получается так, то что у тебя в AGAINST - тайтл, и видимо, нет совпадений по словам. Если тайтл состоит из нескольких слов, то поищите лайком, есть ли у тебя посты с такими словами

если есть желание - скинь дамп таблицы dle_post, если нет, то почитай: Для просмотра ссылки Войди или Зарегистрируйся
 
Тайтл я менял перед тем как постить сюда...

В базе примерно 3500 новостей. Нужна вся база или примеры с похожими новостями и без?
 
Назад
Сверху