2013-06-02 2 views
0

как минимум потратить дни в кошмаре MySQL, когда кто-то может мне помочь. Я работаю над плагином для WP.wordpress поиск по нескольким таблицам по умолчанию поисковый запрос

Моя проблема звучит так просто: чтобы сохранить базу данных 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; 
} 

Thanks.

ответ

0

Они берут на $where строку в поиске SQL и вместо того, чтобы его искать только для переменной post_title, они добавляя к строке запроса MySQL с добавлением geotag_city, geotag_state или geotag_country перепроверить для других Матчи.

Таким образом, если вы ищете «Нью-Йорк», он вернет результаты, в которых совпадают данные geotag_city, а также название. (Неправильная форма для перечисления всех возможных ключевых слов в заголовке.)

Смежные вопросы