2013-06-02 228 views
0

至少在MySQL夢魘中度過了幾天,希望有人能幫助我。我爲WP做了一個標記插件。默認搜索查詢多個表格上的搜索查詢

我的問題聽起來很簡單:爲了保持wordpress數據庫的乾淨和高性能,我決定在額外的表格中保存附加字段(標籤,標題,自由文本,url,...),而不是添加典型的元字段。現在搜索查詢也必須包含這些字段。

幾個小時後,我發現(geoteagging wordpress example):

add_filter('posts_join', 'geotag_search_join'); 
add_filter('posts_where', 'geotag_search_where'); 
add_filter('posts_groupby', 'geotag_search_groupby'); 

到目前爲止好。現在是它重寫查詢(geotag_search_where)的時間,但這裏的噩夢開始了......

自定義表名是:「abc_tags」,字段名爲「abc_title」和「abc_tags」。 「abc_tags」是一個長文本字段,用逗號分隔純文本項目。

我不明白用查詢preg_replace操縱...我希望有人可以幫助。

function geotag_search_where($where) 
{ 
  if(is_search()) { 
    $where = preg_replace(
       "/\(\s*post_title\s+LIKE\s*(\'[^\']+\')\s*\)/", 
       "(post_title LIKE $1) OR (geotag_city LIKE $1) OR (geotag_state LIKE $1) OR (geotag_country LIKE $1)", $where); 
   } 

  return $where; 
} 

謝謝。

回答

0

他們正在搜索SQL$where字符串,而不是使它只搜索post_title變量,他們要追加到MySQL查詢字符串添加geotag_citygeotag_stategeotag_country交叉檢查等火柴。

這種方式,如果您搜索「紐約」它將返回結果geotag_city匹配以及標題。 (在標題中列出每個可能的關鍵詞都不是很好的形式。)