2013-03-13 64 views
0

我有一個學生表first_name和last_name。當我在名字或姓氏上應用搜索時,它會給我正確的記錄,但是當我用完整名稱進行搜索時,它不會返回任何內容。這是我的查詢如何搜索字段組合的數據

SELECT 
    `student_personal_info`.`spi_id` AS `sid`, 
    `student_personal_info`.`spi_first_name` AS `fname` 
FROM 
    `student_personal_info` 
WHERE 
((spi_first_name like '%test developer%') OR (spi_last_name like '%test developer%') 
ORDER BY 
`spi_first_name` ASC 

有沒有什麼辦法可以使它與兩個字段的組合進行搜索。

如果我們輸入名字.middle名字和姓氏,但在名字和姓氏不是中間名的情況下不輸入,它會給出記錄。

SELECT `student_personal_info`.`spi_id` AS `sid` , `student_personal_info`.`spi_first_name` AS `fname` 
FROM `student_personal_info` 
WHERE (
spi_scholar_no LIKE '%amir hussain khan%' 
) 
OR (
CONCAT(spi_first_name, ' ', spi_middle_name, ' ', spi_last_name) LIKE '%amir hussain khan%' 

我也試過這個,但它的工作僅僅是精確匹配。

SELECT `student_parents_info`.`spri_spi_id` AS `sid` 
FROM `student_parents_info` 
WHERE (MATCH (spri_first_name, spri_middle_name, spri_last_name) AGAINST ('Pramod Kumar Sharma*' IN BOOLEAN MODE)) 
ORDER BY `spri_first_name` ASC 
LIMIT 0 , 30 

請給出其他建議。

+0

您需要使用的完整名稱而不是或 – 2013-03-13 11:53:18

回答

1

嘗試使用CONCAT搜索()..

SELECT `student_personal_info`.`spi_id` AS `sid` , `student_personal_info`.`spi_first_name` AS `fname` 
FROM `student_personal_info` 
    WHERE CONCAT(spi_first_name, ' ', spi_middle_name, ' ', spi_last_name) LIKE '%test%' 
ORDER BY `spi_first_name` ASC 

它總是對我的作品。

+0

如果第一個名字是'test',如果第二個名字是'tester',那麼它會與儀式不符? – 2013-03-13 12:03:07

+0

@new_developer如何處理這個中間名的情況下,因爲一些用戶有中間名,有些沒有。你可以給我任何解決方案 – 2013-03-13 12:54:02

+0

@PrasanthBendra它不會匹配,因爲我們正在尋找'測試開發人員' - new_developer – alwaysLearn 2013-03-13 15:20:36

0

嘗試這樣

SELECT `student_personal_info`.`spi_id` AS `sid`, `student_personal_info`.`spi_first_name` AS `fname` 
FROM `student_personal_info` 
WHERE 
    ((spi_first_name like '%amir khan%') OR (spi_last_name like '%test develope%')) 
ORDER BY `spi_first_name` ASC 

你缺少「)」

0

你收到一個完整的名稱來執行與搜索?或者你總是得到2個獨立的(姓和名)?

如果你得到一個全名字符串更改查詢來連接姓和名,並使用

GROUP BY HAVING(full_name LIKE %search_term%) 

,如果你得到兩個單獨字符串,只是改變你或和姓和名之間LIKE測試。

0

嘗試用CONCAT:

SELECT 
    `student_personal_info`.`spi_id` AS `sid`, 
    `student_personal_info`.`spi_first_name` AS `fname` 
FROM 
    `student_personal_info` 
WHERE 
    CONCAT(spi_first_name, ' ', spi_last_name) LIKE '%test develope%' 
ORDER BY 
`spi_first_name` ASC 
+0

如果第一個名字是'test',如果第二個名字在'tester'中,那麼它與儀式不符? – 2013-03-13 12:03:38

0

使用PHP分裂您test developetestdevelope,然後寫這樣的查詢:

$first = 'test'; 
$last = 'develope'; 

$query = "SELECT `student_personal_info`.`spi_id` AS `sid`, `student_personal_info`.`spi_first_name` AS `fname` FROM `student_personal_info` WHERE 
(spi_first_name like '%".$first."%') OR (spi_last_name like '%".$last."%') 
ORDER BY `spi_first_name` ASC"; 

如果有兩個以上的詞,拆分單詞和創建動態的where查詢。

相關問題