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

Select dentro do outro


walck

Pergunta

Boa Tarde, amigos do Forum/PhP

Estou precisando listar todas as categorias principais com as 3 primeiras subcategorias

Tabela pcategoria (categorias principais)

campos cat_id cat_nome

Tabela scategoria (subcategorias)

scat_id scat_nome cat_id

Agora queria mostrar o resultado assim as categorias principais e as 3 primeiras subcategorias

Cores

laranja

amarelo

Vermelho

mais....

Tipos

Liso

Espelhado

Fosco

mais...

Tentei de mil maneiras mas não consigo entender a logica de como seria pensei em 2 selcts não chega nem perto do resultado, alguém me da uma força?????

Abraços e desde já muito obrigado!!!

meu codigo esta assim:

<?
include "config.php";

$sql = mysql_query("select * from pcat") or die (mysql_error());
while ($dados = mysql_fetch_array($sql)) {

$pcat_id = $dados['pcat_id']; echo "$pcat_id";
$pcat_nome = $dados['pcat_nome']; echo "$pcat_nome";

 $sql = mysql_query("select * from cats ") or die (mysql_error());
while ($dados = mysql_fetch_array($sql)) {
$scat_id = $dados['id']; echo "$scat_id";
$scat_nome = $dados['cat']; echo "$scat_nome";
  
  }
  }
  ?>

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Estou precisando listar todas as categorias principais com as 3 primeiras subcategorias

Tabela pcategoria (categorias principais)

campos cat_id cat_nome

Tabela scategoria (subcategorias)

scat_id scat_nome cat_id

Agora queria mostrar o resultado assim as categorias principais e as 3 primeiras subcategorias

Amigo, isso está mais para um problema de SQL que um problema de PHP, basicamente você vai utilizar uma única query:

SELECT
    c.cat_id, c.cat_nome,
    s.scat_id, s.scat_nome,s.cat_id
FROM
    pcategoria c
JOIN
    scategoria s
ON
    s.cat_id = c.cat_id
LEFT JOIN
    scategoria s2
ON
    ( s2.cat_id = s.cat_id ) AND
    ( s2.scat_id < s.scat_id )
GROUP BY
    c.cat_id, c.cat_nome, s.scat_id, s.scat_nome
HAVING
    COUNT( s2.scat_id ) < 3
ORDER BY
    c.cat_nome, s.scat_nome;
Você vai perceber na cláusula HAVING a função COUNT( s2.scat_id ) < 3, esse 3 é o número de registros de cada subgrupo. Utilizando os seus dados irá retornar o seguinte:
+--------+----------+---------+-----------+--------+
| cat_id | cat_nome | scat_id | scat_nome | cat_id |
+--------+----------+---------+-----------+--------+
|      2 | cores    |       2 | azul      |      2 |
|      2 | cores    |       1 | marrom    |      2 |
|      2 | cores    |       3 | vermelho  |      2 |
|      1 | tipos    |       6 | acetinado |      1 |
|      1 | tipos    |       8 | espelhado |      1 |
|      1 | tipos    |       7 | fosco     |      1 |
+--------+----------+---------+-----------+--------+
6 rows in set (0.00 sec)

[]'s

J.Neto

Link para o comentário
Compartilhar em outros sites

  • 0

Cara muito obrigado por ter respondido, fiz as adaptações para o nome correto das colunas só que não funcionou o phpmyadmin retornou o seguinte erro:

Estou usando esta consulta para fazer o menu lateral de um site gostaria que aparecesse a categoria principal embaixo as 3 subcategorias da categoria principal.

Mensagens do MySQL : [Documentação]
#1052 - Column 'id' in on clause is ambiguous
SELECT
    c.pcat_id, c.pcat_nome,
    s.id, s.cat, s.pcat_id
FROM
    pcat c
JOIN
    cats s
ON
    s.pcat_id = c.pcat_id
LEFT JOIN
    cats s2
ON
    ( s2.pcat_id = s.pcat_id ) AND
    ( s2.id < id )
GROUP BY
    c.pcat_id, c.pcat_nome, s.id, s.cat
HAVING
    COUNT( s2.id ) < 3
ORDER BY
    c.pcat_nome, s.cat

Link para o comentário
Compartilhar em outros sites

  • 0
#1052 - Column 'id' in on clause is ambiguous

Sim, de fato a coluna `id` é ambígua, isso porque você está utilizando uma coluna `id` no primeiro select e uma no segundo JOIN. A ambiguidade está exatamente ai, no segundo select. Quando você disse para fazer o JOIN com o cats s e depois o LEFT JOIN com o cats s2 e comparou os `id` você esqueceu de usar o alias da tabela. Troque essa parte do seu código por:

LEFT JOIN
    cats s2
ON
    ( s2.pcat_id = s.pcat_id ) AND
    ( s2.id < s.id )

Acho que isso deve resolver...

[]'s

J. Neto

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

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