Помощь Не везде выводятся похожие новости

Тема в разделе "DLE", создана пользователем yura, 26 дек 2015.

Информация :
Актуальная версия DataLife Engine 11.2
( Final Release v.11.2 | Скачать DataLife Engine | Скачать 11.2 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 11.1 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Модераторы: killoff
  1. yura

    yura

    Регистр.:
    6 апр 2006
    Сообщения:
    437
    Симпатии:
    65
    Есть сайт, на данный момент он на 10.1. Изначально был примерно на 7.2 и периодически обновлялся. Сайт на голом ДЛЕ, модуль только один и тот подключается инклудом в шаблоне.

    В чем суть... На сайте более 250 категорий и более 3000 новостей. На многих "старых" новостях не выводятся похожие новости. Иногда бывает также, что похожие новости не выводятся в новых новостях, которые размещены в старых (давно созданных) категориях.
    Бывает также что выводятся не все похожие новости. Т.е. прописано выводить 4, а выводится 1-2.

    В категориях минимум по 5 новостей, т.е. в какую-бы новость не зашел - в этой же категории найдется еще 4 для вывода в похожих. Но нет... :(

    Эти вот "старые" новости и категории это единственное, что общее у новостей без похожих новостей.

    Сразу скажу - очищать кеши и перестраивать новости/похожие новости, играться с настройками вывода похожих новостей просто и сайта и с той же категории, кеширование - со всем этим игрался!

    Специально включил на сервере логи мускула (айди похожих новостей хранятся в таблице _post_extras в поле related_ids, айди записываются при первом посещении новости) - в одних новостях есть отправка айди в базу, а в некоторых нет
    Код:
      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 
    Помогите в какую сторону копать :) Заранее спасибо за ответы!
     
  2. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.116
    Симпатии:
    2.130
    А что собственно возвращает запрос:
    Код:
    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 похожие новости? Если да - нужны логи тех, у кого не показываются.
     
  3. yura

    yura

    Регистр.:
    6 апр 2006
    Сообщения:
    437
    Симпатии:
    65
    Как понять что он возвращает? Сорри если вопрос глупый, я просто не очень прогаммист :)

    Новость 3121 без похожих новостей

    Вот фрагмента лога где айди похожих новостей прописываются:
    Код:
         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
    Как видно с лога новость 830 получает похожие новости 836,837,835,832
     
    Последнее редактирование: 3 янв 2016
  4. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.116
    Симпатии:
    2.130
    всмысле выполни запрос в пхпМаяАдмин и покажи результат ))) Только тайтл пропиши верный, а то ты заменял
     
  5. yura

    yura

    Регистр.:
    6 апр 2006
    Сообщения:
    437
    Симпатии:
    65
    Выполнил следующий запрос
    Код:
    UPDATE dle_post_extras SET related_ids='4,5,7,8' WHERE news_id='6'
    Со своим префиксом разумеется...
    Айди похожих новостей вписались!
    Выполнил этот запрос к соседней новости
    Только с реальными префиксами, тайтлом... Мускул вернул пустой результат (т.е. ноль строк) - как гласит пхпмайадмин
     
  6. yura

    yura

    Регистр.:
    6 апр 2006
    Сообщения:
    437
    Симпатии:
    65
    П.С. Это скорее не важно т.к. фрагмент кода о похожих новостях в show.full все равно давно кардинально не менялся... Я обновился с 10.1 до 10.6
     
  7. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.116
    Симпатии:
    2.130
    Смотри, я не просто так попросил выполнить тот запрос.

    И так, ошибки в ДЛЕ нет. Всё корректно.
    Принцип работы похожих новостей - этот запрос ищет ID статей, которые имеют что-то похожее с заголовком текущей новости, которые опубликованы, но при этом они опубликованы раньше, чем текущая.

    Раз запрос вернул ноль строк, то похожих статей просто нет в базе. Как вариант - править код и убрать требование, чтобы новости были старее текущей.
     
  8. yura

    yura

    Регистр.:
    6 апр 2006
    Сообщения:
    437
    Симпатии:
    65
    У меня на сайте есть категории, которые я создаю и сразу же добавляю в них минимум 5 новостей, заголовки похожи. И в первой из новостей этого раздела (по айди) выводятся в похожих новостях более новые... Айди похожих новостей ведь записываются при первом заходе в новость..

    И есть разделы где новостей 20-30-40, заголовки абсолютно все похожи, НО... у самых первых (старых) новостей может не быть похожих новостей, потом у более новых быть, а у самых новых снова не быть....

    Мистика какая-то

    Разница в самих новостях может быть разве что в том, что у части из них только заголовок, а у части этот же заголовок вписан еще и как тайтл. Но и это различие не мешает формировать похожие новости
     
  9. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.116
    Симпатии:
    2.130
    Да, да, сори, я косякнул... Там не дата публикации, конечно, а текущая дата... Т.е. чтобы новости, которые уже есть на сайте, но будут опубликованы в будущем (есть и такая настройка) не показывались в похожих.

    В твоём случае не выполняется именно часть:
    MATCH (title, short_story, full_story, xfields) AGAINST ('ТАЙТЛ НОВОСТИ ')

    Ну а почему она не выполняется - не имея базы и глубоких знаний MySQL сказать не реально. Попробуй обратиться в раздел по MySQL и выложить пример строк БД из одной из проблемных категорий. Кажись, там @latteo у нас гуру, быстро тебе объяснит что не так. Ну либо вернёт к нам в раздел ))
     
    Последнее редактирование: 28 дек 2015
    yura нравится это.
  10. yura

    yura

    Регистр.:
    6 апр 2006
    Сообщения:
    437
    Симпатии:
    65
    Создал тему в разделе по мускулу - https://www.nulled.cc/threads/270396/

    Кстати гуглил свою проблему - каменты о том, что похожие новости не выводятся есть даже на сайте у целки. Где о разумеется съезжает, что код формирования похожих новостей давно не менялся, я не я и лошадь не моя, все работает. Так что проблема таки не у одного меня
     
    killoff нравится это.