Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
1 / 1 / 1
Регистрация: 10.12.2014
Сообщений: 30

Поиск по слову

13.12.2015, 20:58. Показов 1626. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, вообще задача такая В БД есть 3 колонки "IMG HEAD_TEXT TAGNAME" в колонке TAGNAME хранятся ячейки с примерным содержимым "животные мир искусство" и соответсвенно в других колонках хранится какой-либо текст .Далее уже на стороне сайта в поле вводим слова к примеру "животные мир душа" после нажатия на кнопку нам должно выдать значения в соответствующих ячейках("IMG" and "HEAD_TEXT") первых 3-x совпадений в БД, совпадения должны быть даже по 1 слову к примеру мы вводим "животные" а выдать нам должно значения строки где TAGNAME = "животные мир искусство" и на первых местах должны быть те совпадения у которых больше совпавших слов .
НАГЛЯДНЫЙ ПРИМЕР:

IMG HEAD_TEXT TAGNAME
txt1 headtxt1 животные мир искусство
txt2 headtxt2 люди мир рыба
txt3 headtxt3 жаба икусство виноделие
txt4 headtxt4 коты животные искусство
ДАЛЕЕ МЫ ВВОДИМ В ПОЛЕ СЛОВА = "животные искусство огурец"
и нам должно выдать именно в таком порядке :

1:txt1 headtxt1
2:txt4 headtxt4
3:txt3 headtxt3

я делал так:
PHP
1
2
3
4
$result_set = $mysqli ->query("SELECT * FROM tags WHERE tagname = '$tags'");
$user = $result_set->fetch_assoc();
$img1 = $user['img'];
$head_text1=$user['head_text'];
Но я получал только 1 значение и только по полному совпадению 3-х слов

Добавлено через 4 часа 16 минут
Что никто не знает? Может я неправильно вопрос задал вы скажите просто срочно надо узнать
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.12.2015, 20:58
Ответы с готовыми решениями:

Поиск по слову
Привет всем! Люди, подскажите, как реализовать (что использовать) поиск слова в "словаре", да так, чтобы, когда мы обращались к...

Как организовать поиск в другой книге или в этой же книге, поиск по слову на определенных листах
Всем привет!) Как организовать поиск в другой книге или в этой же книге, поиск по слову на определенных листах? Например слово...

Поиск по первому слову
Приветствую, суть вопроса такая: Есть ФИО: Иванов Петр Васильевич Пупкин Иван Иванович идет запрос подстрокой 'ива' нужно...

13
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
14.12.2015, 00:13
MySQL
1
2
3
4
5
6
7
SELECT * FROM `t1` WHERE `TAGNAME` LIKE '%животные%' OR `TAGNAME` LIKE '%искусство%' OR `TAGNAME` LIKE '%огурец%'
ORDER BY CASE 
  WHEN `TAGNAME` LIKE '%животные%' THEN 1
  WHEN `TAGNAME` LIKE '%искусство%' THEN 2
  WHEN `TAGNAME` LIKE '%огурец%' THEN 3
END
LIMIT 3
Добавлено через 2 минуты
Даже вместо последнего WHEN..THEN можно ELSE написать
0
1 / 1 / 1
Регистрация: 10.12.2014
Сообщений: 30
14.12.2015, 00:14  [ТС]
а как их правильно записать в переменные php
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
14.12.2015, 00:24
SQL
1
"SELECT * FROM tags WHERE  WHERE MATCH (tagname) AGAINST ($tags);"
Полнотекстовый поиск в MySQL
вот так LIKE '%животные%' никогда не делайте
можно LIKE 'животные%' где поле в котором ищете является индексом, тогда индекс будет использоваться
0
1 / 1 / 1
Регистрация: 10.12.2014
Сообщений: 30
14.12.2015, 00:29  [ТС]
хм,спасибо но вопрос тот же как мне записать 3 первых запроса в переменные пхп в правильном порядке?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
14.12.2015, 00:34
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$search = "животные искусство огурец";
$cond = $order = '';
$i = 0;
foreach(preg_split('/\\s+/u', $search) as $word)
{
    $cond .= ' `TAGNAME` LIKE "%' . $word . '%" OR';
    $order .= ' WHEN `TAGNAME` LIKE "%' . $word . '%" THEN ' . ++$i;
}
 
 
$query = 'SELECT * FROM `table`';
if(!empty($cond)) 
{
    $query .= ' WHERE ' . rtrim($cond, 'OR');
    $query .= ' ORDER BY CASE ' . $order . ' END';
}
$query .= ' LIMIT 3';
 
//выполняем запрос $query
Добавлено через 2 минуты
Ну да, лучше MATCH

Добавлено через 1 минуту

Не по теме:

только здесь наверное никакие индексы не спасут.. Разве что попробовать использовать UNION вместо этого с сортировкой по числу?

0
1 / 1 / 1
Регистрация: 10.12.2014
Сообщений: 30
14.12.2015, 00:38  [ТС]
спасибо, а вот вопрос когде я сделаю выборку как именно мне обратиться к этим 3 элементам\срокам (не знаю как правильно назвать ) допустим ко 2 элементу типо так ?
PHP
1
2
3
$user = $query->fetch_assoc();
$img1 = $user['img'][1];
$head_text1=$user['head_text'][1];
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
14.12.2015, 00:44
Судя по всему, вам надо посмотреть пример кода на офф сайте http://php.net/manual/ru/mysql... -assoc.php Там приведен пример цикла вывода записей из БД.
Либо же, т.к. у MySQLi вроде нет метода а-ля fetchAll() в PDO - то либо накапливать вывод в переменную и тогда да, как вы написали. Либо использовать переменную-счетчик (а в данном конкретном случае можно и переменную-флаг) и по условию выполнять требуемое действие.
0
1 / 1 / 1
Регистрация: 10.12.2014
Сообщений: 30
14.12.2015, 00:59  [ТС]
Спасибо огромное , а вопрос вотPoznakomlus, написал что лучше использовать MATCH и вот а не могли бы вы сделать такой же пример для MATCH, а так спасибо огромное всё работает
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
14.12.2015, 01:07
zzadrott, В таблице вы должны создать FULLTEXT индекс для этого поля
А запрос
PHP
1
$result_set = $mysqli ->query("SELECT * FROM tags WHERE  WHERE MATCH (tagname) AGAINST ('$tags')");
0
1 / 1 / 1
Регистрация: 10.12.2014
Сообщений: 30
14.12.2015, 01:09  [ТС]
а вопрос чем лучше?
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
14.12.2015, 01:14
Цитата Сообщение от zzadrott Посмотреть сообщение
а вопрос чем лучше?
Вы когда научитесь читать документацию. Че за лень?
Чем лучше читай доки
Лучше sphinx. Но вам его даже не советуют. Пишут простое элементарное и то вам лень читать
0
1 / 1 / 1
Регистрация: 10.12.2014
Сообщений: 30
14.12.2015, 01:48  [ТС]
Вообщем сделал я так
PHP
1
2
3
4
5
6
7
8
$search = $_POST['tags'];
$poisk=$mysqli ->query("SELECT * FROM tags WHERE MATCH (tagname) AGAINST ('$search')");
 
while($row=$poisk->fetch_assoc())
{
printf ("%s (%s)\n", $row["img"], $row["head_text"]);
}
$poisk->free();
у меня в таблице есть значения в колонке tagname есть такие значение:
в 1 строке: животные люди
в 2 строке: олени люди животные
в 3 строке: пигнвины природа мать
в 4 строке: природа
и при запросе
"природа" не выдает ничего
"животные" не выдает ничего
"олени" выдает 2 строку
"люди" не выдает ничего
"люди животные" не выдает ничего
"природа мать" выдает только 3 строку а должно и 4
почему так?

Добавлено через 7 минут
такое ощущение что некоторые слова просто игнорируются
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
14.12.2015, 02:20
SQL
1
SELECT * FROM `full_text` WHERE MATCH(tags) AGAINST ('природа' IN BOOLEAN MODE)
добавьте IN BOOLEAN MODE
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.12.2015, 02:20
Помогаю со студенческими работами здесь

Поиск изображения по слову
Добрый день, помогите пожалуйста. Есть php скрипт на обработку изображения, в папке со скриптом есть .txt файл, там записано в одну строчку...

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

Поиск строки по слову
Хочу найти строку по слову.. Если в комбобох выбрано слово, то выдавать все строки по где есть это слово как правильно прописать поиск...

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru