Ir para conteúdo

POWERED BY:

Arquivado

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

Renato Duarte

SELECT para mostrar últimas compras

Recommended Posts

Continuando um sistema de compras, veio um problema que há dias tento resolver.

Tenho uma tabela chamada compras (abaixo), que armazena as compras feitas pelos lojistas (tbl cad_lojista). Preciso mostrar as últimas compras feitas pelo lojista logado (tenho uma session com o id dele) com os dados referentes às compras feitas por ele, como a data, quantidade e nome do produto comprado. O fornecedor é escolhido pelo lojista antes de entrar na tela que fará a consulta, ou seja, também tenho o id dele numa variável.

O que não sei como fazer é o select (o principal) para trazer esses dados. O que difere uma compra da outra é o campo id_sessao

 

Imagem Postada

 

Agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT * FROM TABELA WHERE ID = 1 ORDER BY DATA_VENDA DESC

 

Usando o Order By você faz a ordenação como queira.

DESC = Decrescente, ou seja, da ultima para primeira

ASC = Ascendente, ou seja, da primeira para ultima

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daria certo, mas eu não sei o id a ser mostrado. Preciso mostrar as últimas compras, numa lista (tabela html), diferenciando uma compra da outra pelo campo id_sessao, senão aparece como se fosse uma compra só.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consegui entender muito bem ainda.

(Eu nao consigo ver a imagem que você postou, pq nao tenho acesso a internet, a nao ser esse fórum, aqui no trabalho)

Posta seu código PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tem o id_fornecedor no caso, não ?

 

 

SELECT * FROM cad_lojista WHERE id_fornecedor = 1 ORDER BY DATA DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela de compras tem os campos id (PK), id_produto (FK), id_fornecedor (FK), id_lojista (FK), id_sessao, data, quantidade

 

Quero mostrar as últimas compras feitas pelo lojista logado, apenas do fornecedor escolhido por ele através de list/menu.

 

Motta, nesse caso que sugeriu, eu continuaria mostrando todas as compras, independente do id_sessao, que é o que define a compra.

 

Todos os campos que tiverem o mesmo id_sessao são tratados como uma compra. Portanto, quero mostrar (numa tabela) todos os campos cujo id_sessão são iguais e, depois, somar esses campos.

 

Se houver campos id_sessao diferentes (e com certeza haverá) daria um quebra de linha e iniciaria a lista dos produtos da outra sessão e com a soma deles abaixo.

 

Obrigado pela força até aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, você não tá complicando demais algo simples? Se você tem o id do lojista e da sessão, e só quer exibir dados que satisfaçam estas condições, seu where seria apenas uma combinação and entre eles.....

 

SELECT * 
FROM cad_lojista 
WHERE id_fornecedor = 1 
and id_sessão = 'valor_campo'
ORDER BY DATA DESC 

Agora, se quer mostrar N sessões ordenadas por data e filtradas apenas pelo id do lojista, use um group by (ou apenas o order by mesmo) para resolver....

 

SELECT id_produto, id_sessao, quantidade, data 
FROM cad_lojista 
WHERE id_fornecedor = 1 
group by data, id_sessao
ORDER BY DATA DESC, id_sessao

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não consegui demostrar corretamente o que precisava e, por isso, a "complicação" que você se refere Chronos. E pra mim está deveras complicado.

 

Fiz o SELECT como disse, Chrnos

 

$sql = mysql_query("SELECT id, id_produto, id_lojista, id_fornecedor, id_sessao, quantidade, date_format(data, '%d/%m/%y - %H:%i')as data FROM compras WHERE id_fornecedor = $id_fornecedor AND id_lojista = ".$_SESSION['id_lojista']." GROUP BY data, id_sessao ORDER BY DATA DESC, id_sessao");
while ($linha = mysql_fetch_assoc($sql))
{
 echo $linha['data'] . "<br />";
 echo "ID TABELA COMPRAS: " . $linha['id'] . "<br />";
 echo "ID PRODUTO: " . $linha['id_produto'] . "<br />";
 echo "ID FORNCEDOR: " . $linha['id_fornecedor'] . "<br />";
 echo "ID LOJISTA: ". $linha['id_lojista'] . "<br />";
 echo "ID SESSAO: " . $linha['id_sessao'] . "<br />"; 
 echo "QUANTIDADE: " . $linha['quantidade'] . "<br /><br />"; 
}
e está praticamente da forma que preciso, mas ainda tenho que dividir a listagem por sessões.

 

1º: Como faço para colocar essa divisão (um <hr>, por exemplo) sempre que as sessões (id_sessao) forem diferentes?

2º: Como saber o valor total (compras.quantidade * cad_produto.preco_final) das compras que têm o id_sessao iguais?

 

15/01/10 - 16:17

ID TABELA COMPRAS: 7

ID PRODUTO: 7

ID FORNCEDOR: 3

ID LOJISTA: 1

ID SESSAO: gk774afrruf811ck3ismm0ba85

QUANTIDADE: 3

 

15/01/10 - 16:17

ID TABELA COMPRAS: 6

ID PRODUTO: 7

ID FORNCEDOR: 3

ID LOJISTA: 1

ID SESSAO: gk774afrruf811ck3ismm0ba85

QUANTIDADE: 2

 

Total: (????)

 

===================================

 

15/01/10 - 15:50

ID TABELA COMPRAS: 4

ID PRODUTO: 7

ID FORNCEDOR: 3

ID LOJISTA: 1

ID SESSAO: r1p35pt094c8h25j4rj1t79p77

QUANTIDADE: 1

 

15/01/10 - 15:50

ID TABELA COMPRAS: 5

ID PRODUTO: 7

ID FORNCEDOR: 3

ID LOJISTA: 1

ID SESSAO: r1p35pt094c8h25j4rj1t79p77

QUANTIDADE: 1

 

15/01/10 - 15:45

ID TABELA COMPRAS: 3

ID PRODUTO: 7

ID FORNCEDOR: 3

ID LOJISTA: 1

ID SESSAO: r1p35pt094c8h25j4rj1t79p77

QUANTIDADE: 56

 

Total: (????)

 

=====================================

 

Muito obrigado a todos. Já ajudaram bastante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz com o distinct como sugeriu, mas ele pegou apenas o primeiro registro.

 

Fiz assim:

$sql = mysql_query("SELECT DISTINCT id_sessao FROM compras");

Ele rotornou isso:

mysql> select distinct id_sessao from compras;
+----------------------------+
| id_sessao 	|
+----------------------------+
| kc302jprbbge8v0khuugdqh4l3 |
| r1p35pt094c8h25j4rj1t79p77 |
| gk774afrruf811ck3ismm0ba85 |
+----------------------------+
3 rows in set (0.00 sec)

Mas o que eu quero é que ele mostre todos os campos onde o id_sessao for o mesmo e fazer uma lista.

 

No banco está assim

 

ID ============= SESSAO

1==============kc302jprbbge8v0khuugdqh4l3

2 ==============kc302jprbbge8v0khuugdqh4l3

3 ==============r1p35pt094c8h25j4rj1t79p77

4 ==============r1p35pt094c8h25j4rj1t79p77

5 ==============r1p35pt094c8h25j4rj1t79p77

6 ==============gk774afrruf811ck3ismm0ba85

7 ==============gk774afrruf811ck3ismm0ba85

 

Preciso que retorne assim:

Compra 1

kc302jprbbge8v0khuugdqh4l3

kc302jprbbge8v0khuugdqh4l3

 

Compra 2

r1p35pt094c8h25j4rj1t79p77

r1p35pt094c8h25j4rj1t79p77

r1p35pt094c8h25j4rj1t79p77

 

Compra 3

gk774afrruf811ck3ismm0ba85

gk774afrruf811ck3ismm0ba85

 

Obrigado, pessoal.

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.