У меня до сих пор есть этот запрос:
if(!empty($_SESSION['s_property_region'])) {
$sqlWHERE .= " AND $wpdb->postmeta.meta_key = 'property_region' AND $wpdb->postmeta.meta_value = '".$_SESSION['s_property_region']."'";
}
if(!empty($_SESSION['s_property_bedrooms'])) {
$sqlWHERE .= " AND $wpdb->postmeta.meta_key = 'property_bedrooms' AND $wpdb->postmeta.meta_value = '".$_SESSION['s_property_bedrooms']."'";
}
$sql = "SELECT $wpdb->posts.ID
FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
WHERE $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'property'
".$sqlWHERE."
ORDER BY $wpdb->posts.post_date DESC";
Это работает, если я просто ищу одно настраиваемое поле, но не два вместе. Я знаю почему и потому, как работает LEFT Join. Не будет строки, в которой post_type может содержать две вещи одновременно.
после объединения я получу такую структуру:
| ID | meta_key | meta_value |
| 1 | property_region | East |
| 1 | property_bedrooms | 4 |
| 2 | property_region | West |
| 2 | property_bedrooms | 2 |
существует ли запрос, который может превратить две таблицы в такую структуру:
| ID | property_region | property_bedrooms |
| 1 | East | 4 |
| 2 | West | 2 |
Если запрос может сделать таблицу похожей на приведенную выше, то мой простой ГДЕ это = это И это = это будет работать.
Любая помощь в этом вопросе очень ценится
Спасибо
Scott
РЕДАКТИРОВАТЬ: После некоторых поисков я теперь собрал этот код: http://pastebin.com/5YYDLyeR Он работает и возвращает структуру, которую я ищу, но как только я пытаюсь сделать WHERE для property_region и property_bedrooms, я получаю: # 1054 - Неизвестный столбец 'property_bedrooms' в 'where clause'
EDIT2: Хорошо, я взял код PMV и чтобы иметь возможность выполнить мое предложение WHERE, мне пришлось выполнить подзапрос: http://pastebin.com/dvTgsU7S Этот код делает то, что я хочу, но есть ли лучшие способы достижение этого запроса? Я предполагаю, что производительность будет проблемой, когда у меня более 1000 записей в БД ...