|
|
|
| Всем добрый день
Возник вопрос по MySQL
Я не знаю можно ли вообще такой запрос построить.
Есть таблица в которой есть ключи meta_value, meta_key, post_id, id
Допустим в этой таблице есть записи
ID | post_id | meta_key | meta_value
1 - 2 - autor - Иванов
2 - 2 - title - Это заголовок 1
3 - 4 - autor - Петров
4 - 4 - title - Это заголовок 2
3 - 4 - content - текст статьи
4 - 4 - vipusk - 300
5 - 5 - autor - Сид
6 - 5 - title - Это заголовок 5
....
...
и т.д.
Я хочу выбрать все записи где post_id = 2,4,5 и meta_key = autor, title
Чтобы запрос возвратил результат типа такого id_post, autor, title т.е. как-то объединил все записи в таблице по post_id (2,4,5) и возвратил значения в одной записи autor, title
типа post_id = 2, autor = Иванов, title = Это заголовок 1
post_id = 4, autor = Петров, title = Это заголовок 2
post_id = 5, autor = Сид, title = Это заголовок 5
Надеюсь вы поймете что я имею ввиду | |
|
|
|
|
|
|
|
для: yura_040
(15.11.2011 в 16:21)
| | Вроде решил ))
SELECT t.meta_value AS title, o.meta_value AS overview, t.post_id
FROM wp_postmeta AS o
LEFT JOIN wp_postmeta AS t ON o.post_id = t.post_id
WHERE t.meta_key = 'article_quick_title'
AND o.meta_key = 'article_quick_overview'
AND t.post_id IN (1,2,3,4,5,6,7,8);
ORDER BY t.post_id ASC;
Может у кого-то есть решение лучше ? | |
|
|
|
|
|
|
|
для: yura_040
(15.11.2011 в 16:48)
| | Ну и не плохое решение. Возможно вас заинтересует альтернативное
SELECT
a.post_id AS post_id,
a.meta_value AS autor,
t.meta_value AS title
FROM
(SELECT * FROM tbl
WHERE
post_id IN (2, 4, 5) AND
meta_key = 'autor') AS a
LEFT JOIN
(SELECT * FROM tbl
WHERE
post_id IN (2, 4, 5) AND
meta_key = 'title') AS t
USING(post_id)
ORDER BY
a.post_id
| Тут объединяются две таблицы, каждая из которых содержит по три строки (ну или по 8, если будет использоваться 1,2,3,4,5,6,7,8). У вас же происходит самообъединение и промежуточная таблица будет размером N*N, где N - количество строк в таблице. WHERE-условие всегда применяется уже после объединения. Единственное, что не удобно, в представленном выше варианте - приходится дублировать WHERE-условия в двух местах. | |
|
|
|
|
|
|
|
для: cheops
(15.11.2011 в 16:56)
| | Спасибо за ответ
Ваше решение конечно более продвинутое ))) | |
|
|
|