2017-01-18 2 views
0

Мне нужно найти лучший способ выбрать записи из db строкой, которая не соответствует точно строке в db.Выбор результатов неточным соответствием

Один хранится в БД:

So-Fi (S. 1st St. District), 78704 (South Austin), Bouldin Creek, South Congress 

И один я должен соответствовать это:

$myArea = 'So-Fi-S-1st-St-District-78704-South-Austin-Bouldin-Creek-South-Congress'; 

в $ myArea на самом деле значение, взятое из БД и отформатирован для SEO- дружественный URL-адрес на другой странице.

Я попытался

SELECT* FROM t1 WHERE area = REPLACE('".$myArea."', '-', '') 

Но ясно, что нет никакого совпадения. В принципе, поскольку я не могу приручить $ myArea и отформатировать его обратно к тому, что было в db.

Есть ли способ удалить все знаки препинания и оставить только буквенно-цифровые символы в db перед тем, как выбрать?

+0

Вы можете использовать 'REPLACE', чтобы удалить знаки препинания. Этого будет достаточно? Является ли строка, в которой вы должны всегда совпадать в этом конкретном формате (просто отсутствует пунктуация)? –

+0

Да, я на самом деле использую строку из db на другой странице, чтобы вычеркнуть пунктуацию и специальные символы, чтобы преобразовать ее в дружественный формат SEO, например ... Creek-South-Congress – santa

+0

В этом случае используйте цепочку замены. См. Этот ответ здесь: http://stackoverflow.com/a/1671056/2022457 –

ответ

1

Выполнение подобных запросов гарантирует вам некоторую головную боль, есть много особых случаев, которые вы не сможете покрыть.

Почему вы не добавляете поле «slug» в свою базу данных, где вы помещаете дружественную строку в SEO. Таким образом, вы делаете прямой поиск пули, не требуя большого количества манипуляций с строками.

Пример таблицы базы данных:

CREATE TABLE `locations` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `slug` varchar(255) NOT NULL, 
    `location` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=UTF8; 

Тогда вы Lookups так:

SELECT location from locations where slug = :slug; 
+0

На самом деле это очень хороший момент. Я также смогу пропустить манипулирование этим в строку URL-адреса, ориентированную на SEO. Я думаю, что это тот угол, который я искал, спасибо. – santa

Смежные вопросы