Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andrea cerqueira

Subquery

Recommended Posts

Preciso faz uma consulta que me retorne os autores que tiveram mais acesso em seus posts.

A estrutura é a do WP, pra quem não conhece é o seguinte, tenho uma tabela de posts e nessa tabela tenho tb o id do autor.

Tenho outra tabela que tem o id do post e a qtd de vezes que esse post foi acessado.

Fazendo separadamente eu tenho essas duas querys:

 

// pego cada autor

SELECT b.post_author AS id_author

FROM wp_posts AS b

JOIN wp_usermeta AS c ON ( c.user_id = b.post_author AND c.meta_key = 'wp_user_level' AND c.meta_value < 5 )

WHERE b.post_status = 'publish'

GROUP BY id_author

 

// pego a soma de cada autor

SELECT SUM(meta.meta_value) AS total, post.post_author

FROM wp_posts AS post

INNER JOIN wp_postmeta AS meta ON ( meta.post_id = post.ID AND meta.meta_key = '_post_views' )

WHERE post.post_author = 7

AND post.post_status = 'publish'

AND post.post_type = 'post'

ORDER BY total DESC

 

Só que eu preciso fazer o ranking e não consegui usar subquery.

Alguém pode me dar uma luz?

Qualquer coisa posso mandar o sql

 

Obrigado.

 

Acho que consegui a subquery, mas tá lentaaaaa...

 

SELECT b.post_author AS id_author, (

SELECT SUM(meta.meta_value) AS total

FROM wp_posts AS post

INNER JOIN wp_postmeta AS meta ON ( meta.post_id = post.ID AND meta.meta_key = '_post_views' )

WHERE post.post_author = id_author

AND post.post_status = 'publish'

AND post.post_type = 'post'

) total

FROM wp_posts AS b

JOIN wp_usermeta AS c ON ( c.user_id = b.post_author AND c.meta_key = 'wp_user_level' AND c.meta_value < 5 )

WHERE b.post_status = 'publish'

GROUP BY id_author

ORDER BY total DESC

LIMIT 200

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim :

 

SELECT b.post_author AS id_author ,SUM(meta.meta_value) AS total
FROM wp_posts AS b
JOIN wp_usermeta AS c ON ( c.user_id = b.post_author AND c.meta_key = 'wp_user_level' AND c.meta_value < 5 )
INNER JOIN wp_postmeta AS meta ON ( meta.post_id = post.ID AND meta.meta_key = '_post_views' )
WHERE b.post_status = 'publish'
and post.post_author = 7
AND post.post_status = 'publish'
AND post.post_type = 'post'
GROUP BY id_author
ORDER BY total DESC
ORDER BY total DESC

 

É preciso ir nesta tabela wp_usermeta (meta_value < 5 ) ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

preciso usar isso wp_usermeta (meta_value < 5 ) pq tenho que pegar só alguns tipos de usuários.

essa query que você mandou só pega do usuario de id 7, o que eu postei era só um exemplo.

mas a query que eu fiz tá funcionando, já me deram a ideia de colocar indice e ela vai ficar mais rápida.

obrigado pela dica ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.