2015-10-02 3 views
0

Я хочу, чтобы выбрать post_id где (meta_key = имя_группы и meta_value = Каукая) и (meta_key = _featured и meta_value = 1)Mysql выберите запрос, когда несколько строк

Таблица: wp_postmeta

post_id | meta_key | meta_value 
--------------------------- 
746  | group_name | Caucaia 
746  | _featured | 1 
747  | group_name | Caucaia 
747  | _featured | 0 
1791 | group_name | Aruba 
1791 | _featured | 1 

я пытался ниже запрос, но не работает

SELECT `post_id` FROM `wp_postmeta` WHERE (`meta_key` = 'group_name' and `meta_value` ='Caucaia' and `post_id` in (746, 747, 731, 1791, 1799)) or (`meta_key` = '_featured' and `meta_value` ='1' and `post_id` in (746, 747, 731, 1791, 1799)) GROUP BY `post_id` 

Как сделать запрос для выбора из нескольких строк? или есть другой способ?

ответ

1

Использование агрегации:

SELECT `post_id` 
FROM `wp_postmeta` 
WHERE (`meta_key` = 'group_name' and `meta_value` ='Caucaia' and `post_id` in (746, 747, 731, 1791, 1799)) or 
     (`meta_key` = '_featured' and `meta_value` ='1' and `post_id` in (746, 747, 731, 1791, 1799)) 
GROUP BY `post_id` 
HAVING COUNT(*) = 2; 

На самом деле, я заметил два списка являются одинаковыми. Я хотел бы написать это с помощью списка конструкторы:

SELECT `post_id` 
FROM `wp_postmeta` 
WHERE (post_id` in (746, 747, 731, 1791, 1799)) AND 
     (meta_key, meta_value) IN (('group_name', 'Caucaia'), ('_featured', '1')) 
GROUP BY `post_id` 
HAVING COUNT(*) = 2; 
+0

Спасибо много. Он работает –

0

После того, как способ сделать это, чтобы иметь пункт where со всеми комбинациями вам нужно, и подсчитать количество строк, он возвращает:

SELECT post_id 
FROM  wp_postmeta 
WHERE (meta_key = 'group_name' AND meta_value = 'Caucaia') OR 
     (meta_key = '_featured' AND meta_value = '1') 
GROUP BY post_id 
HAVING COUNT(*) = 2 
+0

вы забыли раздел 'IN'? – CodeGodie

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