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

organizar retorno de uma consulta em tabela (html)


Skin_

Pergunta

Olá pessoal,

considerem as tabelas:

Table Vendedor (
idv -> Chave primária,
nome
);
Table Mercadoria(
idm -> Chave primária,
produto
);
Table Vend_Merc(
idv,
idm,
Primary Key(idv,idm),
idv -> Chave estrangeira de Vendedor,
idm -> Chave estrangeira de Mercadoria
)
Eu preciso colocar em uma tabela todas as mercadorias vendidas por vendedores com nome começando com 'J'; A tabela precisaria ficar assim:
| vendedor | Mercadorias |
| joca    | relógio,lápis,régua|
| joão    | relógio,caderno|
...
Ou seja, todas as mercadorias de cada vendedor encontrado precisam ficar na mesma linha Não estou com problemas com a consulta.
SELECT V.nome,M.produto FROM Vendedor as V JOIN Vend_Merc as VM ON V.idv = VM.idv JOIN Mercadoria as M ON VM.idm = M.idm WHERE V.nome LIKE('j%')

Não sei como fazer para percorrer os registros da consulta de modo a organizar as informações conforme o exemplo de tabela.

Alguém poderia me ajudar?

Valeu!

Editado por Skin_
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

<?php

mysql_connect("localhost", "mysql_user", "mysql_password") or

die("Não foi possível conectar: " . mysql_error());

mysql_select_db("mydb");

$query ="SELECT V.nome,M.produto FROM Vendedor as V JOIN Vend_Merc as VM ON V.idv = VM.idv JOIN Mercadoria as M ON VM.idm = M.idm WHERE V.nome LIKE('j%')";

$result = mysql_query($query);

if (!$result) {

$message = 'Invalid query: ' . mysql_error() . "\n";

$message .= 'Whole query: ' . $query;

die($message);

}

echo "<table>

<tr>

<td>

vendedor

</td>

<td>

mercadoria

</td>

</tr>";

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

echo "<tr>"

printf("<td>%s</td><td>%s</td>", $row["nome"], $row["produto"]);

echo "</tr>"

}

echo "</table>"

mysql_free_result($result);

?>

Eu não testei o código não, mas acho q é isso. Espero ter ajudado.

Editado por Leo Medina
Link para o comentário
Compartilhar em outros sites

  • 0
Eu não testei o código não, mas acho q é isso. Espero ter ajudado.

Obrigado Leo, mas isso não resolve meu problema!

Seu código oferece como resposta:

--------------------------------
 Vendedor   |   Mercadoria
--------------------------------
 joao F. M. | relógio
 joao F. M. | lápis
 joao F. M. | régua
 Joca A. B. | relógio
 Joca A. B. | caderno
...
Mas eu preciso exibir assim:
--------------------------------
 Vendedor   |   Mercadoria
--------------------------------
 joao F. M. | relógio,lápis,régua
 Joca A. B. | relógio,caderno
...

Isto é, todas as mercadorias vendidas por joão precisam estar na mesma linha que seu nome (e assim com todos os vendedores)

Ainda estou precisando de ajuda! se alguém tiver alguma sugestão...

Valeu!

Link para o comentário
Compartilhar em outros sites

  • 0

ah, tá, você tá querendo as mercadorias agrupadas por vendedor...Se o campo mercadoria fosse, ao invés de varchar, um campo numérico poderíamos usar umas das funções agregadas do sql e resolveríamos o problema com uma cláusula "group by" na query.

Mas nesse caso o q você tem q fazer é ordenar a query q está na variável $query pelo nome do vendedor e dentro do loop você vai testar se o vendedor se repete. Enquanto ele se repetir você concatena os valores do campo "Mercadoria" em uma variável e quando ele não se repetir mais você dá o "echo". Entendeu?

Seria uma coisa mais ou menos assim (eu não testei, mas já é uma idéia pra você começar):

(...)

$query ="SELECT V.nome,M.produto FROM Vendedor as V JOIN Vend_Merc as VM ON V.idv = VM.idv JOIN Mercadoria as M ON VM.idm = M.idm WHERE V.nome LIKE('j%') order by V.nome";

(...)

$i=0;

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

$i++;

$vendedor = $row["nome"]; //Vendedor Atual

if ($i==1) $vendedor_anterior = $vendedor;

if ($vendedor==$vendedor_anterior)

$produtos.=$row["produto"].", ";

else

{

echo "<tr>";

printf("<td>%s</td><td>%s</td>", $vendedor_anterior, $produtos);

echo "</tr>";

$produtos=$row["produto"].", ";

}

$vendedor_anterior = $vendedor;

}

echo "<tr>";

printf("<td>%s</td><td>%s</td>", $vendedor_anterior, $produtos);

echo "</tr>";

(...)

Espero ter ajudado.

Editado por Leo Medina
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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...