Вчера у меня был similar question для системы, которая ищет определенные пометки полей для ключевых слов.
Ответ на указанную выше ссылку вернет сообщение, если какое-либо из полей содержит поисковый запрос.
Однако улучшенная версия ниже возвращает , сколько из ключевых слов было найдено (от 0 до # ключевых слов, а не фактическое количество ключевых слов найдено в каждом поле).
Таблицы мета и пользователя FYI Met в основном одинаковы, это должно работать на вас. Возможно, вы сможете установить это с помощью объекта запроса wordpress, однако мой код является обычным SQL, поскольку он является автономным скриптом - вне WordPress.
SELECT *
FROM (
SELECT
post.ID as post_id,
(IF ((
post.post_title LIKE '%c++%'
OR post.post_content LIKE '%c++%'
OR meta_field_a.meta_value LIKE '%c++%'
OR meta_field_b.meta_value LIKE '%c++%'
), 1, 0)
+ IF ((
post.post_title LIKE '%java%'
OR post.post_content LIKE '%java%'
OR meta_field_a.meta_value LIKE '%java%'
OR meta_field_b.meta_value LIKE '%java%'
), 1, 0)) AS occurrences
FROM wp_posts post
JOIN wp_postmeta meta_field_a ON (meta_field_a.post_id = post.ID AND meta_field_a.meta_key = 'field_a')
JOIN wp_postmeta meta_field_b ON (meta_field_b.post_id = post.ID AND meta_field_b.meta_key = 'field_b')
WHERE post.ID IN (212, 213, 214)
GROUP BY post.ID
) AS results
WHERE results.occurrences > 0
«если» заявление блоки проверки по ключевому слову, и возвращает 1 или 0, если они будут найдены или не найдены (в любой области). Это добавляется вместе для создания «вхождений», которое возвращается в строке.
Блок оператора «JOIN» вытаскивает только одну метку по имени ключа. Каждый мета-ключ нуждается в собственном соединении, но, по-видимому, это не дорогостоящая операция.
Оператор «WHERE» ограничивает фильтр указанными идентификаторами сообщений. Они поступают из внешней функции, но вы можете заменить ее собственной инструкцией, чтобы проверить тип/статус сообщения вручную. Так как вы имеете дело с пользователями, вы, вероятно, вообще не хотите, чтобы WHERE там (или, возможно, вам нужно проверить другую мета-пользователя, например роль).
Спасибо, я закончил использовать JOINS также ... – user1049961