Похожие новости DLE рандомно?

12 3
iccup
На сайте с 01.05.2016
Offline
195
968
$db->query( "SELECT id, date, short_story, xfields, title, category, alt_name, MATCH (title, short_story, full_story, xfields) AGAINST ('{$body}') as score FROM " . PREFIX . "_post WHERE {$where_category}{$allowed_cats}{$not_allowed_cats}MATCH (title, short_story, full_story, xfields) AGAINST ('{$body}') AND id != " . $row['id'] . " AND approve=1" . $where_date . " ORDER BY score ASC LIMIT " . $config['related_number'] );
сейчас похожие новости формируются по запросу что приведен выше. А именно, двиг ищет сначала по новостям со старой даты. Можно ли сделать запрос который будет шерстить по постам рандомно? т.е. в похожие попадали как старые новости, таки новые.
kimsufi.com ( https://www.kimsufi.com ) очень дешевые и качественные дедики https://clck.ru/gvF9p - антибот, использую уже 3 года.
B
На сайте с 14.01.2016
Offline
83
#1
Можно, делай
M2
На сайте с 16.07.2015
Offline
73
#2
ORDER BY RAND()?
LEOnidUKG
На сайте с 25.11.2006
Offline
1745
#3
Massimo2223 #:
ORDER BY RAND()?

А потом ко мне сразу, за платной консультацией, почему сайт дико тормозит и БД просто вешается.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
iccup
На сайте с 01.05.2016
Offline
195
#4
LEOnidUKG #:

А потом ко мне сразу, за платной консультацией, почему сайт дико тормозит и БД просто вешается.

ну, идея пока в том, чтобы создать кеш похожих новостей на другом сервере. потом просто сделать импорт уже на рабочую базу.
LEOnidUKG
На сайте с 25.11.2006
Offline
1745
#5
iccup #:
ну, идея пока в том, чтобы создать кеш похожих новостей на другом сервере. потом просто сделать импорт уже на рабочую базу.

Не обязательно, можно выбирать рандомные записи, только BY RAND() при этом не использовать.

например такой:

SELECT cat,trans,name FROM `cms_freepages` f JOIN ( SELECT rand() * (SELECT max(id) from `cms_freepages`) AS max_id ) AS m WHERE f.id >= m.max_id ORDER BY f.id ASC LIMIT 20;

Адаптировать думаю можно под DLE
lutskboy
На сайте с 22.11.2013
Offline
177
#6
LEOnidUKG #:
SELECT

мой вариант

SELECT id, title, date, RAND() AS rnd FROM `table` ORDER BY rnd 
LEOnidUKG
На сайте с 25.11.2006
Offline
1745
#7
lutskboy #:

мой вариант

Он ничем не отличается от  ORDER BY RAND() и БД умрёт от этого запроса.

БД 850 000 записей ORDER BY RAND()

Запрос занял 42.9442 сек.

А мой запрос пример:

Запрос занял 0.0007 сек

Дальше думаю сами разберёте, почему решение рандомного вывода это не очень стандартная задача.

LEOnidUKG
На сайте с 25.11.2006
Offline
1745
#8

Да конечно, это не полноценный рандом, если присмотреться. 

Можно использовать вот такой:

SELECT `cms_freepages`.* FROM (SELECT id FROM `cms_freepages` ORDER BY RAND() LIMIT 5 ) AS ids JOIN `cms_freepages` ON `cms_freepages`.id = ids.id;

Но, он будет медленнее 

Запрос занял 0.2970 сек.

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

totamon
На сайте с 12.05.2007
Offline
437
#9
iccup :
т.е. в похожие попадали как старые новости, таки новые.
а что там в
$where_date

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
lutskboy
На сайте с 22.11.2013
Offline
177
#10
LEOnidUKG #:
Он ничем не отличается от  ORDER BY RAND() и БД умрёт от этого запроса.

ну ну. проверь сначала и тогда узнаешь

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий