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

abc

def

ghk

abcdef

defghk

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


abc

abcdef

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

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

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


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


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

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


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

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

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

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


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