2014-09-13 128 views
0

PDO,我想用一個搜索查詢。我試圖使用類似查詢,在搜索變量的前端和末尾使用%。但它在兩個詞之間搜索。PDO搜索查詢

如果在數據庫中有名稱Jhon Anderson,並且如果我使用搜索變量使用LIKE %erson%,該查詢將得到包含上述名稱的行。 但我要的是查詢只應該開始字母搜索,所以我用Jhon%試過LIKE查詢時,我得到了想要的結果,但最終採用這種%只有當搜索變量第一個單詞的起始,但對於比賽的作品空間之後的單詞?

我的意思是如果我嘗試Anderson%Ander%,查詢不會得到這一行的結果,因爲安德森是空間後Jhon Anderson字段中的第二個字。

所以我的問題是如何在搜索詞後的空間,如果有開始字母匹配搜索查詢。

我不知道這樣的查詢是否存在,但我認爲它可能與一些循環後使用通配符'%'.$variable.'%'像查詢和獲得所有結果後取消設置搜索變量所在的數組或行與結果的第一個字母不匹配。

任何想法如何實現這樣的搜索的。

查詢現在我使用,

$stmt = $conn->prepare("SELECT ROOM, GUEST_NAME, GUEST_FIRST_NAME, CONFIRMATION_NO, DEPARTURE, PWD FROM RESERVATION_GENERAL_2 WHERE LOWER(GUEST_FIRST_NAME) LIKE ? OR LOWER(GUEST_NAME) LIKE ?"); 
$stmt->execute(array('%'.strtolower($searchFilter).'%','%'.strtolower($searchFilter).'%')); 
+1

我們可以看到,'的query' – 2014-09-13 09:22:24

+0

@Hanky웃Panky 當然,增加了類似的查詢現在我使用,但它不給慾望的結果,我想。 – 2014-09-13 09:36:03

+0

提示:您可以在PHP中使用字符串中的換行符,因此也適用於您的查詢。如果你這樣做,它會使你的閱讀更具可讀性。 – GolezTrol 2014-09-13 09:37:21

回答

1

有點髒,但簡單的解決方法是在搜索中包含的空間:

WHERE ' ' || Name LIKE '% Anderson%' 

你看,我在前面加一個空格Name,所以如果它位於字符串的開頭,它也會找到該單詞。

或者,您可以使用REGEXP_LIKE,但由於Oracle的正則表達式引擎中沒有word boundary表達式,所以它仍然有點尷尬。有關解決方案,請參閱this answer

+0

謝謝你的回覆先生。 但是如果有三個空格,因爲一個人的全名不確定。 e-g'Rameez Hassan Mir',那麼它會再次不起作用? – 2014-09-13 09:32:47

+0

我似乎忘記了其中一個'%'字符。我現在解決了。我認爲這對拉梅茲先生來說應該也很好:「在哪裏?」名稱LIKE'%Hassan Mir%'或'WHERE''||名稱LIKE'%Mir%''都應該找到他。 – GolezTrol 2014-09-13 09:35:11

+0

哇,它的工作你真棒..它在MySQL的工作,我將在PDO嘗試,這也..我希望它的工作原理有.. 很多很多的感謝.. – 2014-09-13 09:56:01