powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как выбрать записи из mySQL значение поля которых содержится в начале строки?
11 сообщений из 11, страница 1 из 1
Как выбрать записи из mySQL значение поля которых содержится в начале строки?
    #39480802
axsmak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица в которой поле "field" равно:

abc

def

ghk

abcdef

defghk

Есть строка, например, "abcdefghk"
Нужно составить запрос который выберет следующие записи:


abc

abcdef

то есть котрые совпадают с началом строки "abcdefghk"

Если в общем, то значение поля должно содержаться в начале строки.
Значения полей и строка могут быть любыми. Здесь я лишь привёл абстрактный пример.
...
Рейтинг: 0 / 0
Как выбрать записи из mySQL значение поля которых содержится в начале строки?
    #39480822
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
axsmak,

Код: sql
1.
'abcdefghk' like concat(field, '%')


fullscan таблички.
...
Рейтинг: 0 / 0
Как выбрать записи из mySQL значение поля которых содержится в начале строки?
    #39481045
axsmak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij, я придумал такой вариант пока ждал ответа -
Код: sql
1.
SELECT * FROM test WHERE field = LEFT('abcdefghk', LENGTH(field));


Какой вариант будет оптимальнее?
...
Рейтинг: 0 / 0
Как выбрать записи из mySQL значение поля которых содержится в начале строки?
    #39481328
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
axsmak,

Равнозначны, т.к. тоже не может использовать индекс.
Если есть гарантированная минимальная длина префикса - тогда можно по индексу искать по этому префиксу. Например, если предметная область требует, чтобы field был минимум в 2 символа, тогда запрос
Код: sql
1.
where field like concat(LEFT('abcdefghk', 2), '%') and 'abcdefghk' like concat(field, '%') 


Вполне имеет право на жизнь как грубый индексный фильтр с recheck'ом. Проверить только, что в таком виде он реально может использовать индекс или же надо выносить выполнение left на приложение.
...
Рейтинг: 0 / 0
Как выбрать записи из mySQL значение поля которых содержится в начале строки?
    #39481330
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkijfullscan таблички.Насчёт фуллскана при шаблоне по префиксу я бы поостерёгся вот так сразу... по крайней мере сперва бы узнал версию сервера.
...
Рейтинг: 0 / 0
Как выбрать записи из mySQL значение поля которых содержится в начале строки?
    #39481421
axsmak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, MariaDB 10.1.22 на Debian 9.0
...
Рейтинг: 0 / 0
Как выбрать записи из mySQL значение поля которых содержится в начале строки?
    #39481423
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mysql 5.7.x использует для like индексы
...
Рейтинг: 0 / 0
Как выбрать записи из mySQL значение поля которых содержится в начале строки?
    #39481424
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
axsmak , а теперь поройте документацию на предмет использования индекса при отборе по LIKE по префиксу. Ну или просто посмотрите EXPLAIN на простейшем модельном запросе. Если используется - то однозначно LIKE, если нет, то в общем пофиг.
...
Рейтинг: 0 / 0
Как выбрать записи из mySQL значение поля которых содержится в начале строки?
    #39481431
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

а каким образом, если шаблон поиска зависит от самой строки таблицы?
Планировщик догадывается, что есть минимальное общее вхождение и переписывает запрос подобно моему последнему?
...
Рейтинг: 0 / 0
Как выбрать записи из mySQL значение поля которых содержится в начале строки?
    #39481480
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij , пардон, невнимательно посмотрел на задачу.

Но тогда бы я вообще переписАл запрос в вариант
Код: sql
1.
2.
3.
SELECT *
FROM table
WHERE field IN ('abcdefghk','abcdefgh','abcdefg','abcdef','abcde','abcd','abc','ab','a');
...
Рейтинг: 0 / 0
Как выбрать записи из mySQL значение поля которых содержится в начале строки?
    #39481524
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

о, кстати да, хороший вариант.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как выбрать записи из mySQL значение поля которых содержится в начале строки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]