Задать вопрос
rOOse
@rOOse
Frontend developer

Запрос из базы, одно поле — много значений?

Собственно в WordPress данные хранятся в доп. полях, напримерmeta_key='type', meta_value='buy', meta_key='price', meta_value='10000' и т.д. задача сделать выборку. этих метаполей много, средствами WP можно прицепиться к search_meta_join типа:
$join .= " JOIN  $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id ";


и таким же образом к search_meta_where, и вот тут я не знаю как правильно сделать, получается такой запрос
SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts JOIN  wp_postmeta ON wp_posts.ID = wp_postmeta.post_id  WHERE 1=1  AND wp_posts.post_type IN ('post', 'page', 'attachment') AND (wp_posts.post_status = 'publish' OR wp_posts.post_author = 1 AND wp_posts.post_status = 'private') AND ( wp_postmeta.meta_value IN ('rent','flat')) GROUP BY wp_posts.ID HAVING COUNT(*) = 2


то есть мне нужны записи которые и rent и flat, я правильно делаю(там кроме rent и flat еще есть, но я сократил)? Но мне так же нужно искать цену между двумя значениями, площадь между двумя значениями и т.д., как правильно такой запрос составить?
  • Вопрос задан
  • 3958 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@art_karetnikov
Лучший мой проект: Мобильный банк Сбербанка РФ.
Коллега, вы зря используете под это вордпресс и метаполя — там поля типа варчар и без индексов. Через некоторое время это у вас начнет жутко тормозить. Разработайте свою структуру, как правильно — с первичными ключами типа int и так далее.
Ответ написан
rOOse
@rOOse Автор вопроса
Frontend developer
Кажется сам разобрался, на каждое ключ-значение нужно будет делать новый JOIN типа
JOIN wp_postmeta as wp_postmeta_1 ON wp_posts.ID = wp_postmeta_1.post_id

и далее уже
AND wp_postmeta_1.meta_value > 8000
Ответ написан
Комментировать
@igoravr
А использование класса WP_Query вам не подошло? Там есть Custom Field Parameters с помощью которых можно сделать выборки по нужным условиям.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы