Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Объединение записей в таблице
 
 автор: yura_040   (15.11.2011 в 16:21)   письмо автору
 
 

Всем добрый день

Возник вопрос по 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:48)   письмо автору
 
   для: 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;

Может у кого-то есть решение лучше ?

  Ответить  
 
 автор: cheops   (15.11.2011 в 16:56)   письмо автору
 
   для: 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-условия в двух местах.

  Ответить  
 
 автор: yura_040   (15.11.2011 в 18:11)   письмо автору
 
   для: cheops   (15.11.2011 в 16:56)
 

Спасибо за ответ
Ваше решение конечно более продвинутое )))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования