Объединение двух запросов MySQL (один для выбора содержимого другого) - PullRequest
1 голос
/ 27 марта 2009

Как бы я скомбинировал следующие два запроса, чтобы получить комбинацию из двух?

SELECT * 
FROM post_attributes 
WHERE name IN ('title', 'body');

SELECT id, url, created_at, name, value 
FROM posts, post_attributes 
WHERE posts.id = post_attributes.post_id
ORDER BY id;

Идея заключалась бы в том, чтобы извлечь номер поста, его URL, время его создания, заголовок и текст сообщения блога из движка блогов Chyrp, но игнорировать другие данные, хранящиеся в той же базе данных.

Я думаю, что поступаю неправильно. Будет ли более подходящая функция для использования?

Ответы [ 4 ]

4 голосов
/ 27 марта 2009
SELECT posts.id, posts.url, posts.created_at, posts.name, posts.value 
  FROM posts, post_attributes 
 WHERE posts.id = post_attributes.post_id
 AND post_attributes.name IN ('title', 'body')
 ORDER BY id;

Добавьте post_attributes.* в конец, если вы хотите, чтобы все поля были из атрибутов записи.

2 голосов
/ 27 марта 2009

Вы ищете это:

SELECT id, url, created_at, name, value, post_attributes.*
  FROM posts, post_attributes 
 WHERE posts.id = post_attributes.post_id
   AND name IN ('title', 'body')
 ORDER BY id;
0 голосов
/ 27 марта 2009

Потрясающая производительность:

select p.id, pa.title, pa.body, pa.created_at, pa.name, pa.value from post_attributes pa, posts p where p.id = pa.post_id and (pa.name = 'title' or pa.name = 'body')
0 голосов
/ 27 марта 2009

Не уверен, что это наиболее эффективно, но это должно работать (при условии, что post_attributes имеет столбец с именем 'value', в котором хранится значение атрибута).

SELECT id, url, created_at, name, value, p_title.value, p_body.value
FROM posts p
INNER JOIN post_attributes p_title on p.id = p_title.post_id 
INNER JOIN post_attributes p_body on p.id = p_body.post_id
ORDER BY p.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...