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

Сложный поиск. MySQL

24.01.2015, 22:38. Показов 2132. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Нужна помощь в запросе поиска.
Ищет нормально только если запрос состоит из одного слова (пример: сушы). Если уже с двух то не работает (пример: сушы пиво).
Есть у кого какие идеи?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    function getSearchDetails($num, $offset) {
        $keyword = $this->session->userdata('keyword');
        $category = $this->session->userdata('category');
        $location = $this->session->userdata('location');
        $city = $this->session->userdata('city');
        
        return $this->db->query("
            SELECT
              items.*, 
              items.name_".$this->cur_lang." AS name, 
              items.text_".$this->cur_lang." AS text
              
            FROM link_location
              LEFT OUTER JOIN city
                ON link_location.city_id = city.id
              LEFT OUTER JOIN region
                ON link_location.region_id = region.id
              RIGHT OUTER JOIN items
                ON link_location.item_id = items.id
            WHERE items.id <> 0
            AND link_location.region_id = ".$location."
            AND link_location.city_id = ".$city."
            AND items.category = ".$category."
            AND (items.name_".$this->cur_lang." LIKE '%".$keyword."%'
            OR items.text_".$this->cur_lang." LIKE '%".$keyword."%'
            OR items.tags LIKE '%".$keyword."%')
            
            ORDER BY IFNULL(items.cat_top_pos, 999999999) ASC LIMIT ".$num." OFFSET ".$offset."
        ");
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.01.2015, 22:38
Ответы с готовыми решениями:

Сложный поиск в PHP
Дело в том что например у меня есть файл .txt и в ньом все данные записаны по типа { &quot;time_posted&quot;:1488578400, ...

Сложный запрос MySQL
Как в одном запросе извлечь данные о неких элементах в таблице, и попутно с других таблиц прицепить к ним строки соответствующие по...

Сложный mysql запрос
Здравствуйте дорогие мои друзья. Есть таблица где данные берутся из mysql и она состоит наименования , типа и количества препаратов. (Там...

7
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
24.01.2015, 23:28
Цитата Сообщение от mounster Посмотреть сообщение
сушы пиво
потому что нужна такая конструкция
SQL
1
2
OR items.tags LIKE '%сушы%'
OR items.tags LIKE '%пиво%'
а у тебя выходит
SQL
1
OR items.tags LIKE '%сушы пиво%'
то есть ищет вхождение "сушы пиво" а не отдельно "сушы" и "пиво"
0
0 / 0 / 1
Регистрация: 23.01.2015
Сообщений: 10
24.01.2015, 23:43  [ТС]
С реализацией такого варианта можете помочь?

SQL
1
2
OR items.tags LIKE '%сушы%'
OR items.tags LIKE '%пиво%'
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
25.01.2015, 00:03
А что собственно не ясно? Или надо тупо вместо тебя написать?
0
0 / 0 / 1
Регистрация: 23.01.2015
Сообщений: 10
25.01.2015, 00:18  [ТС]
Просто тут я так понимаю надо цикл писать с експлодами. Я такого еще не делал и не имею представления как это сделать.
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
25.01.2015, 00:30
Ну а что сложного? Всё это есть на форуме.
1) $keyword переводишь в одномерный массив по разделителю
2) Потом через цикл формируешь строковую переменную ну скажем $insert и подставляешь её в код
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT
              items.*, 
              items.name_".$this->cur_lang." AS name, 
              items.text_".$this->cur_lang." AS text
              
            FROM link_location
              LEFT OUTER JOIN city
                ON link_location.city_id = city.id
              LEFT OUTER JOIN region
                ON link_location.region_id = region.id
              RIGHT OUTER JOIN items
                ON link_location.item_id = items.id
            WHERE items.id <> 0
            AND link_location.region_id = ".$location."
            AND link_location.city_id = ".$city."
            AND items.category = ".$category."
            AND ($insert)
            
            ORDER BY IFNULL(items.cat_top_pos, 999999999) ASC LIMIT ".$num." OFFSET ".$offset."
0
 Аватар для lestat89
29 / 41 / 10
Регистрация: 12.09.2012
Сообщений: 334
25.01.2015, 01:44
Смотри в сторону цикла Foreach и функции Explode
0
0 / 0 / 1
Регистрация: 23.01.2015
Сообщений: 10
27.01.2015, 00:54  [ТС]
Сделал так, работает.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    function getSearchDetails($num, $offset) {
        $keyword = $this->session->userdata('keyword');
        $category = $this->session->userdata('category');
        $location = $this->session->userdata('location');
        $city = $this->session->userdata('city');
        
        $exp_key = explode(" ", $keyword);
        $q = " AND (";
        $start = FALSE;
        foreach($exp_key as $value) {
            if($start === TRUE) {
                $q.= " OR ";
            }
            $q.= '(
                    (items.name_'.$this->cur_lang.' LIKE "%'.$value.'%") 
                    OR (items.text_'.$this->cur_lang.' LIKE "%'.$value.'%")
                    OR (items.tags LIKE "%'.$value.'%")
                    )';
            $start = TRUE;
        }
        $q.= ")";
        
        return $this->db->query("
            SELECT
              items.*, 
              items.name_".$this->cur_lang." AS name, 
              items.text_".$this->cur_lang." AS text
              
            FROM link_location
              LEFT OUTER JOIN city
                ON link_location.city_id = city.id
              LEFT OUTER JOIN region
                ON link_location.region_id = region.id
              RIGHT OUTER JOIN items
                ON link_location.item_id = items.id
            WHERE items.id <> 0
            AND link_location.region_id = ".$location."
            AND link_location.city_id = ".$city."
            ".$q."
            
            ORDER BY IFNULL(items.cat_top_pos, 999999999) ASC LIMIT ".$num." OFFSET ".$offset."
        ");
    }
Теперь состоит задача внедрить сюда еще одну ликованную таблицу:
link_categories
id | item_id | category_id

Нужно также добавить условие где category_id соответствует $category. Item может быть в нескольких категориях. Как такое сделать? Дайте дельный совет.
Спасибо!

Добавлено через 14 часов 1 минуту
Что, никто ничего?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2015, 00:54
Помогаю со студенческими работами здесь

сложный запрос к БД (MySQL)
Помогите сформировать запрос. есть бд. в ней с десяток таблиц. в каждой таблице есть поле date. мне нужно удалить из базы по всем...

mysql выполнить сложный запрос
Вообщем есть масив такого вида Array ( =&gt; Array ( =&gt; 0 =&gt; HaXyI HuK:D ...

Оптимизировать сложный запрос php+mysql
Ребят сложный запрос к базе(сильно грузит сервер)... Сам по себе запрос не очень(не я его делал), оптимизировал как смог: SELECT ...

Создать сложный запрос mysql wordpress
Не могли бы вы помочь мне переделать сложный запрос к базе данных с подсчетом постов? Ситуация такая. Есть каталог объявлений на wordpress...

Сложный поиск по БД
PHP + MySQL. Разрабатываю виртуального собеседника по мотивам темы https://www.cyberforum.ru/algorithms/thread95666.html На входе поиску...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru