Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
107 / 4 / 1
Регистрация: 04.04.2015
Сообщений: 124

Сложный запрос по вхождению строки

11.08.2019, 14:45. Показов 616. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Подскажите пожалуйста как мне реализовать данный запрос.

Есть таблица пользователей, мне нужно реализовать поиск по вхождению подстроки по всем полям. То есть, есть поисковое слово как-то связано с пользователем то добавляем его в выборку. У пользователя есть поля id, логин, имя, фамилия, город. Есть база городов.

MySQL
1
2
3
4
5
id  | login    | fname       | lname         | city
----------------------------------------------------
103 | tuser    | Алексей     | Пупкин        | 99
104 | testuser | Александр   | Конкретный    | 78
105 | tuser2   | Виктор      | Четкий        | 78

MySQL
1
2
3
4
id | name            | country
----------------------------
99 | Москва          | Россия
78 | Санкт-Петербург | Россия

Например мне нужно получить всех пользователей где встречается поисковое слово "Алекс":

MySQL
1
SELECT * FROM users WHERE id LIKE '%Алекс%' OR login LIKE '%Алекс%' OR fname LIKE '%Алекс%' OR lname LIKE '%Алекс%' OR city LIKE '%Алекс%' ORDER BY id DESC
Все отлично работает, в данный момент я получу пользователей с именами Алексей, Александр (103,104). Тут проблем нет. Проблема в городе. Город у меня записан как ID из другой таблицы. То есть например поиск по вхождению "Санкт" - никого не получу.

MySQL
1
SELECT * FROM users WHERE id LIKE '%Санкт%' OR login LIKE '%Санкт%' OR fname LIKE '%Санкт%' OR lname LIKE '%Санкт%' OR sity LIKE '%Санкт%' ORDER BY id DESC
А если искать по цифре 78 то получу, и тех пользователей где город 78 и тех у кого в id встречается 78. - это правильно и так должно быть.

Но если мне нужно именно 'Санкт' сделать запрос к базе может у кого в фамилии такое встретиться ну и город чтоб не только по id искал а была как бы выборка с поиском человека у которого город Санкт-Петербург. Мне получается нужно по id получить name города и его страну и их проверить на вхождение.

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

Надеюсь я доступно объяснил свою задачу и проблему с ней, как назвать тему - даже не знаю как тут кратко описать что мне нужно сделать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.08.2019, 14:45
Ответы с готовыми решениями:

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

Сложный запрос
есть таблица содержащая столбцы (Номер,Сотрудник,Сумма,Вид операции,Дата) нужен запрос по годам с подведением итогов для каждого сотрудника...

Сложный запрос
Помогите составить запрос который вернет N товаров принесшых максимальную прибыль(разница мжду ценой закупки и продажи) за произвольный...

3
Невнимательный
 Аватар для ft4l
3112 / 1290 / 359
Регистрация: 08.02.2013
Сообщений: 7,566
Записей в блоге: 2
12.08.2019, 13:05
MySQL
1
2
3
4
5
SELECT * FROM users a LEFT JOIN sities b ON a.city = b.id
    WHERE login LIKE '%Санкт%' 
        OR fname LIKE '%Санкт%' OR lname LIKE '%Санкт%' 
        OR b.`name` LIKE '%Санкт%'  OR country LIKE '%Санкт%'
    ORDER BY a.id DESC;
Или SELECT a.* и с Вашим названием вместо "sities"

Не по теме:

Как-то хотелось бы сделать красиво,
как для fulltext с Match можно указывать искомое только один раз,
С Like нашёл только варианты вызывающие дополнительные нагрузки ,типа
SELECT * FROM users a LEFT JOIN sities b ON a.city = b.id
WHERE CONCAT_WS(',', login , fname, lname, b.`name`, country) LIKE '%Санкт%'
ORDER BY a.id DESC;

0
107 / 4 / 1
Регистрация: 04.04.2015
Сообщений: 124
12.08.2019, 13:10  [ТС]
Спасибо за ответ.
Можно уточнить.

b.`name`, country

1) name должно быть в кавычках?!
2) если мы записываем b.`name`, разве не должно быть b.`country`?!
0
Невнимательный
 Аватар для ft4l
3112 / 1290 / 359
Регистрация: 08.02.2013
Сообщений: 7,566
Записей в блоге: 2
12.08.2019, 15:11
1. думаю нет , по крайней мере среди "Reserved Words" нет name
Просто по привычке делаю так со всеми именами что подсвечивает редактор.
2. в конкретно данном случае можно оба имени написать без b.
т.к. в таблицах нет полей с такими одинаковыми именами...
Что нельзя сказать про `id` которое присутствует в обоих таблицах...
т.е. SELECT * возвращает в каждом ряду id , с разными значениями.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.08.2019, 15:11
Помогаю со студенческими работами здесь

Сложный запрос
Добрыйь день. Есть база с таблицами: Команды, Игроки, Матчи и информация по голам, во вложении скрины. Так вот. Написал запрос...

Запрос сложный
Доброго времени суток, форумчани! Я зациклился в одном запросе. Не поможете :) Нужно: выбрать отдел, в которой больше 15%...

Сложный запрос
Доброго времени суток! Подскажите куда копать... очень сложно сходу в такое вникнуть, а надо. CREATE TABLE `quests` ( `uid`...

Сложный запрос
Всем добрый день. К примеру имеется таблица 'оплата', которая имеет поля 'код ученика' и 'код месяца'. 'Код ученика' и 'код месяца' это...

Сложный запрос
Есть такая структура данных необходимо сделать выборку которая будет содержать id литератури и количество которое не списано пробовал...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru