@victorib_us

Как оптимизировать такой SQL запрос?

Есть вот такой запрос
SELECT
posts.id,
posts.post_title,
(SELECT meta_value FROM postmeta WHERE meta_key='key_1' AND post_id=posts.id LIMIT 1) as val_1,
(SELECT meta_value FROM postmeta WHERE meta_key='key_2' AND post_id=posts.id LIMIT 1) as val_2,
(SELECT meta_value FROM postmeta WHERE meta_key='key_3' AND post_id=(SELECT meta_value FROM postmeta WHERE meta_key='key_4' AND post_id=posts.id LIMIT 1) LIMIT 1) as val_3
FROM
posts

Он рабочий, но не очень быстрый 0.559 s, для вывода 1000 строк.
Сложность возникла в том, что значения val_1, val_2 и val_3, находятся в одной таблице в поле с общим названием meta_value и отличаются только уже по соседнему полю meta_key. Как этот sql запрос можно сделать более корректным что ли ?
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 1
gogametreveli
@gogametreveli
как то так , но третий подзапрос показывает на проблему с проектированием , все это будет работать при условии что в таблице postmeta есть уникальный ключ из двух полей meta_key, post_id
SELECT
posts.id,
posts.post_title,
v1.meta_value  as val_1,
v2.meta_value  as val_2,
(SELECT meta_value FROM postmeta WHERE meta_key='key_3' AND post_id=(SELECT meta_value FROM postmeta WHERE meta_key='key_4' AND post_id=posts.id LIMIT 1) LIMIT 1) as val_3
FROM
posts 
 left join postmeta v1 on (v1.meta_key='key_1' AND v1.post_id=posts.id) 
  left join postmeta v2 on (v2.meta_key='key_2' AND v2.post_id=posts.id)

в идеале должно выглядеть так
SELECT
posts.id,
posts.post_title,
v1.meta_value  as val_1,
v2.meta_value  as val_2,
v3.meta_value  as val_3,

FROM
posts 
  left join postmeta v1 on (v1.meta_key='key_1' AND v1.post_id=posts.id) 
  left join postmeta v2 on (v2.meta_key='key_2' AND v2.post_id=posts.id)     
  left join postmeta v3 on (v2.meta_key='key_3' AND v2.post_id=posts.id)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Badoo Development Москва
от 140 000 до 180 000 руб.
Badoo Development Москва
от 180 000 до 250 000 руб.
Делис Инфо Москва
от 70 000 до 80 000 руб.
16 авг. 2018, в 09:18
30000 руб./за проект
16 авг. 2018, в 08:17
600 руб./в час
15 авг. 2018, в 23:38
300 руб./за проект