2017-01-18 73 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-值友好的網址在不同的頁面上。

我已經試過

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

但顯然沒有匹配。基本上,因爲我不能馴服$ myArea並將其格式化爲它在db中的內容。

有沒有辦法刪除所有的標點符號,這樣在選擇之前只保留db中的字母數字?

+0

你可以使用'REPLACE'刪除標點。這足夠嗎?是否必須始終以此特定格式匹配字符串(只是缺少標點符號)? –

+0

是的,我實際上使用另一頁上的數據庫字符串去掉標點符號和特殊字符,將其轉換爲SEO友好格式,如... Creek-South-Congress – santa

+0

在這種情況下,請使用鏈接替換。在這裏看到這個答案:http://stackoverflow.com/a/1671056/2022457 –

回答

1

做這樣的查找可以保證你頭痛,很多特殊情況下你將無法覆蓋。

爲什麼不給數據庫添加一個「slug」字段,在那裏放置適合SEO的字符串。這樣你就可以直接查看slug而不必進行大量的字符串操作。數據庫表的

例子:

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; 

那麼你就查找這樣的:

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

其實這是一個很好的觀點。我也可以跳過操縱這個SEO友好的URL字符串。我認爲這是我正在尋找的角度,謝謝。 – santa