2013-04-01 83 views
0

我有,只是不提供結果的查詢:PHP/MySQL的搜索結果使用在字符串變量

數據庫
$name = "John Smith"; 

$query = "SELECT * FROM my_table WHERE lname LIKE '%$name%' AND fname LIKE '%$name%'"; 

LNAME將被列爲史密斯在數據庫 FNAME將可能上市作爲約翰S.

一些條目有一箇中間名稱初始,有些不。

另外,在查詢此信息的頁面上,名稱被拉入爲一個字符串,而不是名字和姓氏字符串。現有代碼的限制。

所以我想搜索字符串$ name以及名字中的姓氏。我認爲我做錯了。這可能嗎?還是有另一種方法來做到這一點?

+0

'回聲$查詢;'和MySQL中直接運行它。 –

+2

您在'lname'和'fname'字段中搜索字符串'John Smith' - 這是無法找到任何內容的,因爲內容在兩個字段之間被分割。 – andrewsi

+0

$ query =「SELECT * FROM my_table WHERE lname LIKE'%$ name%'或fname LIKE'%$ name%'」; – dikirill

回答

1

這個怎麼樣(如果我正確認識你):

SELECT * 
FROM my_table 
WHERE '$name' like concat(fname,' %') 
    AND '$name' like concat('% ',lname) 

SQL Fiddle Demo

要搜索FNAME領域,它正在搜索的全名後concats一個 '%'。要搜索lname字段,它會在完整名稱前連接一個'%'。

編輯:馬里奧的好評論的細微變化,使用REGEXP

SELECT *, CONCAT_WS(' ', fname, lname) 
FROM my_table 
WHERE CONCAT_WS(' ', fname, lname) REGEXP REPLACE('$name',' ', '.*') 

More Fiddle

既然你提到你不能分手(爲什麼?),這款採用替換替換參數相應的空間。

+0

我會修改這一點:select * from foo2其中「john smith」in(fname,lname)或CONCAT_WS(「」,fname,lname)REGEXP「john。* smith」 ; –

+0

@MarioMueller - 我喜歡REGEXP選項 - 我將編輯要顯示的帖子。謝謝! – sgeddes

+0

@MarioMueller - 實際上,這需要改變$ name的輸入,我不認爲OP可以這樣做。如果OP可以改變輸入,那麼我也喜歡這個選項。 – sgeddes

0

我不明白,究竟是什麼問題,但接下來的查詢可以幫助你:

SELECT * FROM my_table WHERE '$name' LIKE CONCAT('%', lname ,'%') and '$name' LIKE   CONCAT('%',fname ,'%') 

如果需要檢查,如果L-NAME包含在$名稱顯示您的查詢是不正確的,你是檢查相反。

0

我有這方面的解決方案..你可以嘗試這樣的

$name = "John Smith"; 

$query = "SELECT * FROM my_table WHERE fname LIKE substring_index(".$name.",' ',1) AND fname LIKE substring_index(".$name.",' ',-1)"; 
相關問題