Разные значения в одном столбце, как получить данные

У меня есть SQL-база данных на основе Wordpress, построенная на настраиваемых полях.

Подключаются следующие 3 столбца: post_id, meta_key и meta_value.

Мета_ключ может быть «имя» и «возраст», а мета_значение может быть «Джон» и «40». Будет выглядеть так:

╔═════════╦══════════╦════════════╗
║ POST_ID ║ META_KEY ║ META_VALUE ║
╠═════════╬══════════╬════════════╣
║     559 ║ name     ║ John       ║
║     559 ║ age      ║ 40         ║
║     699 ║ name     ║ John       ║
╚═════════╩══════════╩════════════╝

Мне нужно сосчитать всех, чье имя Джон и возраст 40 лет. Возможно ли это с оператором выбора?


sql
person BTB    schedule 09.12.2012    source источник


Ответы (2)


SELECT COUNT(*) totalCOunt
FROM
(
  SELECT post_ID
  FROM table1
  WHERE (meta_key = 'Name'  AND meta_value = 'John') OR
        (meta_key = 'Age'  AND meta_value = '40')
  GROUP BY post_ID
  HAVING COUNT(*) = 2
) s
person John Woo    schedule 09.12.2012
comment
Это не сработает, потому что имя/возраст является значением столбца meta_key. - person BTB; 09.12.2012
comment
Хм.. Близко, но с этим, если у меня много Джонсов, я все равно получаю тех, кому не 40 :-/ - person BTB; 09.12.2012
comment
Я имею в виду, если вы добавите кого-то по имени Боб к тому же post_id с возрастом 40 лет. - person BTB; 09.12.2012
comment
можете ли вы дать мне образцы записей того, что у вас есть? :D - person John Woo; 09.12.2012
comment
Проблема по-прежнему заключается в том, что он возвращает сообщения, в которых представлены и имя, и возраст, но возраст может принадлежать кому-то другому:/ - person BTB; 09.12.2012

Я украл твою скрипку, Джон.

SELECT  a.meta_value,b.meta_value,count(*)
FROM TABLE1 a
inner join TABLE1 b on b.Post_ID = a.Post_ID
                  and a.meta_key = 'name'
where b.meta_key = 'age'
and a.meta_value = 'John'
and b.meta_value = 40
group by a.meta_value,b.meta_value

http://sqlfiddle.com/#!2/ebebb/2

О, да, я также предположил, что идентификатор сообщения был тем, что связывало имя с возрастом, иначе я думаю, что это потребовало бы магии, чтобы узнать, что с чем связано.

person JStead    schedule 09.12.2012