2012-02-07 29 views
0

什麼可能是使用關鍵字$ search搜索記錄集的最佳方式,並先顯示那些記錄,然後將其餘記錄拖入查詢中並讓它們隨機排序。換句話說,將搜索結果放在頂部,然後隨機存放剩餘的記錄。下面是我搜索的第一部分:首先關鍵字搜索,然後隨機顯示記錄集的其餘部分

SELECT first_name, last_name, title, agency, address, 
     phone, more_info, description, img_name, active 
    FROM realtor 
    WHERE MATCH as rank (first_name, last_name, agency, description) 
     AGAINST ('$search' IN BOOLEAN MODE) 
    ORDER BY rank DESC 

,然後我想這UNION用剩餘的記錄集使用ORDER BY RAND() 還是有執行此查詢更好的辦法?這是我第一次嘗試UNION。

此外,我的排名似乎不工作,因爲如果我在fname lname搜索我沒有得到fname lname記錄第一,因爲許多記錄有標題列中的lname。有一個更好的方法嗎?感謝

回答

0

請試試這個

SELECT first_name, last_name, title, agency, address, 
     phone, more_info, description, img_name, active, 
     MATCH  (first_name, last_name, agency, description) AGAINST ('$search' IN BOOLEAN MODE) as relv 
    FROM realtor 
     HAVING relv>0 order by relv DESC 
+0

我得到的第一部分,通過消除布爾模式下工作,我現在努力增加一組使用UNION ALL記錄的其餘部分。這裏是我到目前爲止$結果= mysql_query(「選擇姓,名,標題,機構,地址,電話,more_info,描述,img_name,活動從房地產經紀人在哪裏匹配(名字,姓氏,機構,描述)AGAINST搜索')聯合國所有選擇姓氏,姓氏,標題,機構,地址,電話,more_info,描述,img_name,活動從房地產經紀人不匹配(名,姓,代理,描述)反對('搜索')ORDER BY RAND )「); – studebaker 2012-02-08 15:34:31

+0

請注意,您的方法可能會增加服務器負載(特別是大表)。你可以測試我提供的代碼沒有** HAVING relv> 0 **。然後,您將獲得所有匹配的行,然後在它們之後,您將擁有不相關的行。 )反對('$ search'在BOOLEAN模式)作爲relv 來自房地產經紀人 order by relv DESC ' – Huseyin 2012-02-08 19:06:44

相關問題