Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Limitar resultados de uma das tabelas


jose.rob.jr

Pergunta

Eu tenho 2 tabelas onde uma tem informações do conteúdo da página e a outra informações do nome dela (slug) e de seu parentesco.

Uma página tem vários slugs

Eu queria selecionar todos os dados da página na tabela pages e apenas um slug dela usando uma query só...

Tem como?

Eu estou tentando fazer assim:

SELECT DISTINCT pg.*, s.slug
   FROM pages AS pg, page_slugs AS s
WHERE s.parent_page_id = 0 AND pg.page_id = s.page_id AND pg.page_type = "category" AND pg.response_forum_id = 0
O problema é que como uma página tem vários slugs, as linhas resultantes ficam todas diferentes por causa do slug e as páginas acabam vindo repetidas... Se eu tirar o s.slug da sql ela funciona, só que sem o slug ^^ A única forma de resolver isso que eu conheço é fazendo uma subquery:
SELECT DISTINCT pg.*, (SELECT s2.slug FROM page_slugs AS s2 WHERE s2.page_id = s.page_id AND s2.parent_page_id = s.parent_page_id LIMIT 1  ) AS slug
FROM pages AS pg, page_slugs AS s
WHERE s.parent_page_id = 0 AND pg.page_id = s.page_id AND pg.page_type = "category" AND pg.response_forum_id = 0

Mas eu não sei se esta é a melhor maneira :mellow:

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'jose.rob.jr'

Se você usar uma numeração ordenada para cada slug de uma página você consegur o que quer de modo mais eficiente.

Exemplo imagine que a página com id 1 possua 3 slugs assim identificados:

id_página | id_slug
           1 |        1
           1 |        2
           1 |        3
Se sua chave primária for (id_página, id_slug), basta setar o filtro da cláusula where para id_pagina = 1 and id_slug = 1. Esta forma é muito mais eficiente do que a que você utilizou em
SELECT DISTINCT pg.*, (SELECT s2.slug FROM page_slugs AS s2 WHERE s2.page_id = s.page_id AND s2.parent_page_id = s.parent_page_id LIMIT 1    ) AS slug
FROM pages AS pg, page_slugs AS s
WHERE s.parent_page_id = 0 AND pg.page_id = s.page_id AND pg.page_type = "category" AND pg.response_forum_id = 0

Pois quando você usa o LIMIT, o MySQL retornará todas as linhas na consulta e, depois, separará a(s) linha(s) indicada(s) no LIMIT
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...