Sql: столбец поиска, который начинается с цифр - PullRequest
2 голосов
/ 05 июня 2009

У меня проблемы с sql ниже. В основном у меня есть строки, содержащие строки в соответствии с форматом: 129 & c = cars Я хочу только часть цифр, например 129. Запрос sql:

$result = mysql_query("SELECT * FROM " . $db_table . " WHERE id LIKE '" . $id . "%'");

Почему% не работает? Я не могу использовать% ...%, потому что он ловит слишком много.

Ответы [ 3 ]

1 голос
/ 05 июня 2009

Вы можете использовать MySQL 'regexp' в предложении WHERE, чтобы уменьшить количество извлекаемых данных до нужных вам строк. Основное для вашего запроса будет выглядеть так:

SELECT * FROM table WHERE field REGEXP '^$id&'

где $ id вставляется PHP, а нужные вам данные всегда находятся в начале поля и сопровождаются символом &. Если нет, то, конечно, откорректируйте регулярное выражение.

Движок регулярных выражений MySQL, к сожалению, не может выполнять захват, поэтому вам все равно придется выполнять некоторый синтаксический анализ в PHP, как было показано выше soulmerge, но с вещами «где регулярное выражение» в MySQL вам придется иметь дело только с известные вам строки содержат нужные вам данные, а не всю таблицу.

1 голос
/ 05 июня 2009

Я бы порекомендовал использовать регулярные выражения для сопоставления, но, к сожалению, нет способа захватить совпадающую часть с помощью mysql. Вам придется делать извлечение в php. Если у вас есть массив, содержащий все результаты, который называется $array:

$array = preg_replace('/^(\d+).*/', '$1', $array);
0 голосов
/ 05 июня 2009

Используя запрос вроде этого:

SELECT  *
FROM    mytable
WHERE   id >= '0' COLLATE UTF8_BIN
        AND id < ':' COLLATE UTF8_BIN

вернет все строки, начинающиеся с цифры, и сделает ваше выражение sargable , i. е. и индекс на id можно использовать.

Это ускорит ваш запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...