Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как реализовать поиск по названию и указанному доп полю?

Как реализовать поиск по названию и указанному доп полю?


     13.02.2026    Общие вопросы по PHP, Хаки    246

вопрос
Здравствуйте. Имеется файл engine/ajax/search.php который отвечает за вывод быстрого поиска. Изначально он искал по всему что есть на сайте, Потом я чуток подправил его и поиск стал только по заголовку новостей. Скажите что нужно изменить в данной строке чтобы поиск был как сейчас по названию и по конкретным доп полям. new и year

$db->query("SELECT id, short_story, title, date, xfields, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1".$this_date." AND (title LIKE '%{$query}%') ORDER by date DESC LIMIT 5");

Ответа пока нет


14 комментариев

vitnet
PHP-developer

vitnet - 14 февраля 2026 11:37 -

Так не пробовали?
$db->query("SELECT id, short_story, title, date, xfields, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1".$this_date." AND (title LIKE '%{$query}%' OR SUBSTRING_INDEX(SUBSTRING_INDEX(xfields, 'new|', -1), '||', 1) LIKE '%{$query}%' OR SUBSTRING_INDEX(SUBSTRING_INDEX(xfields, 'year|', -1), '||', 1) LIKE '%{$query}%' ORDER by date DESC LIMIT 5");


// Функция для извлечения значения доп. поля
function get_xfield_value($field_name) {
    return "SUBSTRING_INDEX(SUBSTRING_INDEX(xfields, '{$field_name}|', -1), '||', 1)";
}

$conditions = ["title LIKE '%{$query}%'"];
$custom_fields = ['new', 'year']; // Добавляйте новые поля сюда

foreach ($custom_fields as $field) {
    $conditions[] = get_xfield_value($field) . " LIKE '%{$query}%'";
}

$where_clause = implode(' OR ', $conditions);

$db->query("SELECT id, short_story, title, date, xfields, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1" . $this_date . " AND ({$where_clause}) ORDER by date DESC LIMIT 5");

Kentavr
Юзер

Kentavr - 14 февраля 2026 15:14 -

Извиняюсь запутался и не так написал. Код был такой изначально Искало по всем полям и заголовку.

$db->query( "SELECT * FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1" . $this_date . " AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%') ORDER by date DESC LIMIT 5" );


Я сделал так и стало искать только по заголовку

$db->query( "SELECT * FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1" . $this_date . " AND (title LIKE '%{$query}%') ORDER by symboy DESC LIMIT 5" );


Мне нужно чтобы искало по двум указанным полям и заголовку. В любом случае ваш код я попробовал, не сработало. ищет по заголовку как и было у меня, по нужным полям ничего не найдено.

Kentavr
Юзер

Kentavr - 14 февраля 2026 16:47 -


Попробовал, выдает ошибку/

Вроде разобрался. Сделал круглые скобки ошибки нет. Спасибо потестирую сейчас

Все равно ищет по всем полям. Хотя указал нужные

Kentavr
Юзер

Kentavr - 14 февраля 2026 17:08 -

vitnet Напишите пожалуйста в личку телеграм или дискорд.

Kentavr
Юзер

Kentavr - 14 февраля 2026 20:44 -

vitnet,

Этот код тоже не дает нужного результата. Ищет по всем существующим полям (


// Функция для извлечения значения доп. поля
function get_xfield_value($field_name) {
    return "SUBSTRING_INDEX(SUBSTRING_INDEX(xfields, '{$field_name}\"', -1), '\"', 1)";
}

$conditions = ["title LIKE '%{$query}%'"];
$custom_fields = ['new', 'year']; // Добавляйте новые поля сюда

foreach ($custom_fields as $field) {
    $conditions[] = get_xfield_value($field) . " LIKE '%{$query}%'";
}

$where_clause = implode(' OR ', $conditions);

$db->query("SELECT id, short_story, title, date, xfields, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1" . $this_date . " AND ({$where_clause}) ORDER by date DESC LIMIT 5");

lutskboy
Эксперт

lutskboy - 14 февраля 2026 23:49 -

WHERE (title LIKE '%Rembo%' OR SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, 'title_en|', -1 ) ,  '||', 1 ) LIKE '%Rembo%' OR SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, 'title_ru|', -1 ) ,  '||', 1 ) LIKE '%Rembo%')

Kentavr
Юзер

Kentavr - 15 февраля 2026 00:04 -

lutskboy, В моем случае это куда и вместо чего нужно прописать? И при чем здесь Rembo )))

lutskboy
Эксперт

lutskboy - 15 февраля 2026 00:10 -

Rembo ето что ищем

Kentavr
Юзер

Kentavr - 15 февраля 2026 00:14 -

lutskboy, Вы понимаете что строка которую вы мне написали для меня просто бесполезная? Я дал свой код выше. Если вы действительно хотите помочь, то напишите нормальное решение. Что на что заменить. А не просто кусок кода с которым непонятно что делать ))

vitnet Четко написал все, просто в моем случае не сработало.


New-dev.ru
Эксперт

New-dev.ru - 15 февраля 2026 00:54 -

$db->query("
	SELECT * FROM " . PREFIX . "_post 
	WHERE " . PREFIX . "_post.approve = 1 
	{$this_date}
	AND (
		title LIKE '%{$query}%'
		OR xfields LIKE '%new|{$query}%'
		OR xfields LIKE '%year|{$query}%'
	)
	ORDER BY date DESC
	LIMIT 5
");

Платные модули DLE - http://new-dev.ru
Телеграм-канал - http://t.me/webdle

Kentavr
Юзер

Kentavr - 15 февраля 2026 02:06 -

New-dev.ru, Спасибо этот вариант сработал! Пытаюсь сделать тоже самое с обычным поиском но пока безуспешно, там другой код. Напишите свой тг в личку.

Kentavr
Юзер

Kentavr - 16 февраля 2026 08:24 -

Если в файл search.php не быстрого поиска вставляю этот же код код то мускул ошибку выдает
MySQL Error!
MySQL error in file: \engine\modules\search.php at line 775
Error Number: 1054
The Error returned was:
Unknown column 'p.date' in 'where clause'
SQL query:

SELECT * FROM dle_post WHERE dle_post.approve = 1 AND p.date < '2026-02-16 08:20:32' AND ( title LIKE '%%' OR xfields LIKE '%new|%' OR xfields LIKE '%year|%' ) ORDER BY date DESC LIMIT 5


С такой конструкцией

$sql_request = "$sql_find AND (
		title LIKE '%{$query}%'
		OR xfields LIKE '%genre|{$query}%'
		OR xfields LIKE '%year|{$query}%'
	) ORDER BY $order_by LIMIT $search_start,{$config['search_number']}";


Писк срабатывает но ищет по всем полям. Что не так, как исправить?

Kentavr
Юзер

Kentavr - 16 февраля 2026 08:37 -

А нет, оно теперь вообще отказывается что либо искать

byroot
Юзер

byroot - 22 февраля 2026 07:09 -

Готовый плагин настройки поиска - https://dle-faq.ru/modules/29509-dle-t-search-v0.html
Проверил на одном доп поле - работает.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх