Сообщения без ответов | Активные темы Текущее время: 26 окт 2020, 01:42



Ответить на тему  [ Сообщений: 6 ] 
Делаем вывод похожих объявлений похожим 
Автор Сообщение

Зарегистрирован: 24 сен 2020, 21:25
Сообщения: 8

Привет сообщество! Много раз натыкался на тему о том, что похожие объявления на странице объявления совсем не похожи. Поэтому решил предложить решение.
Итак: Идем в файл /modules/messages.inc

Находим вот эту часть кода (Строчка 247 - 251)
Код:
$sql = "SELECT db.id FROM ".PREF."db db 
            JOIN ".PREF."filter_val_text txt ON (db.id = txt.msg AND txt.filter=0)   
            WHERE         
            (".$keywords.") AND
            db.status=1 AND db.id NOT IN (".implode(',', $denied_id).")  LIMIT 0,".($simmessages_max - count($simmessages));


И меняем на это
Код:
$sql = "SELECT db.id FROM ".PREF."db db JOIN ".PREF."filter_val_text txt ON (db.id = txt.msg AND txt.filter=0) WHERE (".$keywords.") AND db.cat = ".$message['cat']." AND db.region=".$message['region']." AND db.status=1 AND db.id NOT IN (".implode(',', $denied_id).") LIMIT 0,".($simmessages_max - count($simmessages));


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

З.Ы всегда делаем резервную копию файла который правите.


08 окт 2020, 01:24
Профиль

Зарегистрирован: 25 фев 2016, 18:46
Сообщения: 229

Иван писал(а):
Привет сообщество! Много раз натыкался на тему о том, что похожие объявления на странице объявления совсем не похожи. Поэтому решил предложить решение.
Итак: Идем в файл /modules/messages.inc

Находим вот эту часть кода (Строчка 247 - 251)
Код:
$sql = "SELECT db.id FROM ".PREF."db db 
            JOIN ".PREF."filter_val_text txt ON (db.id = txt.msg AND txt.filter=0)   
            WHERE         
            (".$keywords.") AND
            db.status=1 AND db.id NOT IN (".implode(',', $denied_id).")  LIMIT 0,".($simmessages_max - count($simmessages));


И меняем на это
Код:
$sql = "SELECT db.id FROM ".PREF."db db JOIN ".PREF."filter_val_text txt ON (db.id = txt.msg AND txt.filter=0) WHERE (".$keywords.") AND db.cat = ".$message['cat']." AND db.region=".$message['region']." AND db.status=1 AND db.id NOT IN (".implode(',', $denied_id).") LIMIT 0,".($simmessages_max - count($simmessages));


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

З.Ы всегда делаем резервную копию файла который правите.


Предлагаю GEO включить в сборку после тестов этот код, чтобы в будущем при обновлении уже все стояло


08 окт 2020, 07:46
Профиль

Зарегистрирован: 23 дек 2010, 19:43
Сообщения: 80

Привет, коллеги!

Поставил себе данную вакцину :-) Вроде всё норм. Буду еще наблюдать. Иван СПАСИБО!


08 окт 2020, 11:41
Профиль

Зарегистрирован: 24 сен 2020, 21:25
Сообщения: 8

MIHALICH писал(а):
Предлагаю GEO включить в сборку после тестов этот код, чтобы в будущем при обновлении уже все стояло
!

Антон писал(а):
Привет, коллеги!
Поставил себе данную вакцину :-) Вроде всё норм. Буду еще наблюдать. Иван СПАСИБО!

Пользуйтесь на здоровье!

На самом деле здесь можно ничего и не тестить логика банальна, и я совсем не против чтоб мои мысли и наработки включали в сборки.

По поводу "вакцины" тут все очень просто.

В запрос включены 2 условия по выборке.
1) Выбираем объявления из того же региона
Код:
AND db.region=".$message['region']."


2) Выбираем объявления из той же категории
Код:
AND db.cat = ".$message['cat']."


Если кто-то хочет сделать выборку только на основе ключевых слов, и региона, то запрос должен быть такой:
Код:
$sql = "SELECT db.id FROM ".PREF."db db JOIN ".PREF."filter_val_text txt ON (db.id = txt.msg AND txt.filter=0) WHERE (".$keywords.") AND db.region=".$message['region']." AND db.status=1 AND db.id NOT IN (".implode(',', $denied_id).") LIMIT 0,".($simmessages_max - count($simmessages));


Те кто хотят сделать выборку только на основе ключевых слов, и категории, то запрос должен быть такой:
Код:
$sql = "SELECT db.id FROM ".PREF."db db JOIN ".PREF."filter_val_text txt ON (db.id = txt.msg AND txt.filter=0) WHERE (".$keywords.") AND db.cat = ".$message['cat']." AND db.status=1 AND db.id NOT IN (".implode(',', $denied_id).") LIMIT 0,".($simmessages_max - count($simmessages));


Ну а если хотите использовать совпадение и по региону и по категории, то используйте запрос из первого поста ;)


09 окт 2020, 01:17
Профиль

Зарегистрирован: 25 фев 2016, 18:46
Сообщения: 229

Вот хорошо бы данный функционал интегрировать в панель управления и сделать настройки похожих объявлений. Переключатель, показывать все похожие, только из регионов категорий или из регионов и ключевых слов


09 окт 2020, 11:38
Профиль
Аватара пользователя

Зарегистрирован: 10 июл 2015, 00:46
Сообщения: 163
Аватара пользователя

Иван писал(а):
MIHALICH писал(а):
Предлагаю GEO включить в сборку после тестов этот код, чтобы в будущем при обновлении уже все стояло
!

Антон писал(а):
Привет, коллеги!
Поставил себе данную вакцину :-) Вроде всё норм. Буду еще наблюдать. Иван СПАСИБО!

Пользуйтесь на здоровье!

На самом деле здесь можно ничего и не тестить логика банальна, и я совсем не против чтоб мои мысли и наработки включали в сборки.

По поводу "вакцины" тут все очень просто.

В запрос включены 2 условия по выборке.
1) Выбираем объявления из того же региона
Код:
AND db.region=".$message['region']."


2) Выбираем объявления из той же категории
Код:
AND db.cat = ".$message['cat']."


Если кто-то хочет сделать выборку только на основе ключевых слов, и региона, то запрос должен быть такой:
Код:
$sql = "SELECT db.id FROM ".PREF."db db JOIN ".PREF."filter_val_text txt ON (db.id = txt.msg AND txt.filter=0) WHERE (".$keywords.") AND db.region=".$message['region']." AND db.status=1 AND db.id NOT IN (".implode(',', $denied_id).") LIMIT 0,".($simmessages_max - count($simmessages));


Те кто хотят сделать выборку только на основе ключевых слов, и категории, то запрос должен быть такой:
Код:
$sql = "SELECT db.id FROM ".PREF."db db JOIN ".PREF."filter_val_text txt ON (db.id = txt.msg AND txt.filter=0) WHERE (".$keywords.") AND db.cat = ".$message['cat']." AND db.status=1 AND db.id NOT IN (".implode(',', $denied_id).") LIMIT 0,".($simmessages_max - count($simmessages));


Ну а если хотите использовать совпадение и по региону и по категории, то используйте запрос из первого поста ;)



Все классно работает только как сделать чтобы показывались похожие объявления из других категорий например если показ идет авто то дополнительно показывались запчасти


20 окт 2020, 12:58
Профиль
Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 6 ] 

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти: