Сообщения без ответов | Активные темы Текущее время: 03 дек 2020, 00:24



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

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

Привет сообщество! Много раз натыкался на тему о том, что похожие объявления на странице объявления совсем не похожи. Поэтому решил предложить решение.
Итак: Идем в файл /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
Сообщения: 236

Иван писал(а):
Привет сообщество! Много раз натыкался на тему о том, что похожие объявления на странице объявления совсем не похожи. Поэтому решил предложить решение.
Итак: Идем в файл /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
Сообщения: 18

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
Сообщения: 236

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


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

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

Иван писал(а):
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
Профиль

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

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


Давайте так:

Если хотите чтоб все корректно работало, и чтоб энтузиасты не ломали головы, станет вопросы корректно.

Например:
У меня структура такая:
Запчасти для легковых > Перед
Запчасти для легковых > Зад
Запчасти для легковых > Трансмиссия

Я хочу чтоб у меня в любой из подкатегорий (относящихся к категории "Запчасти для легковых") отображалось похожие объявления.
Главный критерий- это основная категория, похожие тайтлы, ключи и т.д.

Просто вопрос не реально понять, а значит и реализовать логику.

Как вариант попросить Фиксиков чтоб они все расставили по местам...

например если показ идет авто то дополнительно показывались запчасти - А запчасти в авто или в запчастях? Кто же знает логику построения ваших категорий... (хоть ссылку дайте)

З.Ы. Господа и дамы, ставьте грамотно вопросы!


05 ноя 2020, 02:29
Профиль
Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 7 ] 

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

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


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

Найти:
cron