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

(Resolvido) Select em 2 tabelas


Guest João A Zonta

Pergunta

Guest João A Zonta

Olá,

Tenho duas tabelas:

Tabela1

id -- nome -- data

1 -- teste -- 2007-12-28

Tabela2

id -- id_tabela1 -- foto

1 -- 1 -- img.jpg

2 -- 1 -- casa.jpg

3 -- 1 -- apartamento.jpg

4 -- 1 -- sitio.jpg

Preciso fazer um select que retorne a tabela 1 ordenada por data e um item aleatório da tabela 2. Consigo fazer a consulta ordenada por data mas ele retornorna sempre o mesmo item da tabela 2.

alguém sabe como posso fazer isso?

A cunsulta que uso hoje é assim: "select tabela1.*, tabela2.foto from tabela 1 left outer join tabela2 on tabela2.id_tabela1 = tabela1.id group by id order by tabela1.data

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Não basta apenas adicionar a outra tabela no ORDER BY também? tipo:

ORDER BY tabela1.data ASC, tabela2.id RAND()

Não estou certo se precisa tabela2.id RAND ou apenas tabela2 RAND, pois quando a query é apenas em uma tabela não se cita o campo que vai servir para o sorteio aleatório (já que ficaria sem sentido).

Link para o comentário
Compartilhar em outros sites

  • 0
Preciso fazer um select que retorne a tabela 1 ordenada por data e um item aleatório da tabela 2. Consigo fazer a consulta ordenada por data mas ele retornorna sempre o mesmo item da tabela 2.

alguém sabe como posso fazer isso?

A cunsulta que uso hoje é assim: select tabela1.*, tabela2.foto from tabela1 left outer join tabela2 on tabela2.id_tabela1 = tabela1.id group by id order by tabela1.data

Oi, João!

Tenho quatro observações a fazer.

A primeira:

Por que você está usando GROUP BY se não está utilizando nenhuma função de agragação, tipo COUNT, SUM, etc.?

Se não usa função de agregação, então não há necessidade de GROUP BY (Nem quando se trabalha com relatórios tipo quebra, também chamados de master-detail).

A segunda:

LEFT JOIN é sinonimo de LEFT OUTER JOIN

A Terceira:

Crie indices para os atributos:

na tabela1: id e data (um índice para cada)

na tabela2: id_tabela1

Dependendo do tamanho de sua tabela estes índices agilizarão esponencialmente o tempo de consulta, evitando TABLE SCAN e perda de tempo na ordenação do resultado final.

Utilize, tabém, índices em atributos dentro de cláusulas WHERE.

A quarta:

A cláusula ORDER BY funciona acrescentando atributos(campos) e ordenando conforme os atributos são hierarquizados. Isto significa que o primeiro atributo ficará ordenado, o segundo ficará ordenado dentro do primeiro e assim sucessivamente.

Exemplo:

Dados os atributos campo1 e campo2 com o seguinte conteúdo:

Campo1 Campo2

--------- ----------

A1 B2

B1 A2

D1 C2

A1 D2

D1 A2

O select com ORDER BY campo1, Campo2.

O resultado será:

A1 B2

A1 D2

B1 A2

D1 A2

D1 C2

Em sua consulta se sua intenção é obter resultado semelhante ao acima, então informe o atributo da tabela2 que você deseja ordenar.

SELECT tabela1.*, tabela2.foto 
FROM tabela1 LEFT JOIN tabela2 ON tabela2.id_tabela1 = tabela1.id 
ORDER BY tabela1.data, tabela2.id

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...