Ir para conteúdo

Arquivado

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

Jordan Pinheiro_147113

consulta no banco sql inner join

Recommended Posts

fiz assim

 

<?php
               $sqlTotal2 = $obj->listar("SELECT SUM(car_valor * car_quantidade) + SUM(sev_valor) as total FROM carrinho LEFT JOIN segura_variacao ON car_id = sev_carrinho WHERE car_sessao = '$sessao'") or die (mysql_error());
               $verTotal2 = $obj->ver($sqlTotal2);
               echo $verTotal2->total;
               ?>

 

só q da um resultado totalmente diferente do real

 

para ver como ta a tabela eu postei aqui

http://forum.imasters.com.br/topic/451016-carrinho-de-compras-php-mysql/page__p__1783375__fromsearch__1#entry1783375

Compartilhar este post


Link para o post
Compartilhar em outros sites

o resultado da sql sempre é que voce programa para ela

 

qual o resultado desejado por voce?

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso é verdade.. é o seguinte esse sql é para pegar o valor total do carrinho.. só q meu carrinho é mias complexo tipo tem produto q tem variações e outros não e tipo ele precisa ir na tabela de variações resgatar o valor e somar ao valor do produto já no carrinho e multiplicar pela quantidade

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim:

 

__Looping Principal

____Busca o teu produto e os dados dele

____Looping secundário

______Dentro deste tu busca na tabela de variações todos os valores usando o ID do produto que está "na vez"

______Vai armazenando numa variável

____Fim do looping secundário

____Soma a variável que você acumulou com o valor do produto

____Exibe / Faz o que você precisa fazer com esta soma

__Fim do looping principal

 

Lembrando que você tem que zerar a variável a cada vez que o looping principal reiniciar.

 

Tenta implementar essa lógica em código pra ver, se precisar de ajuda manda ae. Abrass.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Huuuum entendi. Beleza cara, guenta uns 40 minutos aí que eu já tento dar uma olhada com calma beleza? Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, eu dei uma olhada nas tabelas no outro post, mas você poderia postar a modelagem ou pelo menos os campos que fazem as ligações entre as tabelas? E a cardinalidade deles.

 

Tempo tempo de verdade eu só terei depois das 22 Hrs. mas vou dando uns helps até lá, já tentou um GROUP BY ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo diego vou tentar te falar como funciona esse sistema de carrinho meu e ao final posto a modelagem.

 

1 - estou criando um sistema de pizzaria online, ontem numa tabela chamada produtos eu eu faço o resgitro dos mesmo

exemplo:

pro_id | pro_categoria | pro_nome            | pro_valor 
1      | 1             | pizza               | 15
2      | 2             | coca cola 2 litros  | 4.30

 

ai vem nessa minha tabela eu tenho produtos que n precisão de variação como coca-cola ai vai para tabela carrinho direto, mas produtos como pizza é preciso escolhe os sabores e afins para isso eu tenho uma tabela abaixo q segura as opções escolhidas

 

sev_id | sev_carrinho | sev_variacao | sev_valor
1      | 1            | 1            | 12.50
2      | 1            | 6            | 14.90
2      | 1            | 4            | 24.90

 

pronto agora meu carrinho fica assim

 

car_id | car_produto | car_quantidade | car_valor | car_sessao
1      | 1           | 2              | 9.90      | en27r87nv8479r74347ntf878o
2      | 2           | 1              | 4.30      | en27r87nv8479r74347ntf878o  

 

certo agora vem o pipino rsrs

 

se eu tive-se só o carrinho seria simples ficaria assim

 

SELECT SUM(car_quantidade * car_valor) as total FROM carrinho

ele pegaria 9.90 * 2 e somaria com 4.30 * 1

 

só q ai vem eu preciso que essa query minha vá até "segura_variacao" e pegue todos so sev_valor q pertencem a minha where car_id ou seja como mostrei no exemplo acima eu tenho 3

 

sev_id | sev_carrinho | sev_variacao | sev_valor
1      | 1            | 1            | 12.50
2      | 1            | 6            | 14.90
2      | 1            | 4            | 24.90

 

veja que o sev_carrinho é igual a car_id

 

o erro existe acho q porque quando eu tenho um produto em segura_variacao como pizza e outro não como coca cola ele trás um valor bem louco e outra tipo se eu tenho 2 pizzas e 1 coca cola ele multiplica tudo por 3 e não casa um independente por registro

 

espero q tenho entendido, já me reboli todo aqui e nada preciso de outro ponto de vista

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi tudo. Só ficou um problema: Alguns produtos tem variações, beleza. Caso estes tenham, você guarda na tabela segura_variacao pra buscar depois. Mas como você sabe que aquela variação é de determinado produto? Ou seja, qual a ligação entre segura_variacao e produtos ? Você sabe que a variação é do carrinho sev_carrinho, mas de qual produto dele? Não teria que ter um campo sev_idproduto ?

 

E outra dúvida: Você quer no final pegar o 9.90 * 2 e somar com as variações daquele produto ou você quer pegar SOMENTE as variações?

 

Porque pelo que eu entendi digamos que a pizza custe 20 reais. Mas a pizza de calabresa tem variação e custa R$ 22,90. Logo no teu carrinho você vai desejar pegar apenas a variação (R$ 22,90) e não o valor de uma pizza + o valor da pizza de calabresa correto (resultaria em R$ 42,90)?

 

Fico no aguardo =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa! isso mesmo.. eu n posso ir pelo id do produto eu vou pelo id do carrinho tipo meu car_id = 2 tem car_produto = 1 e quando eu vou buscar na variação eu busco car_id = sev_carrinho porque meu carrinho é único tipo ele trás o valor da mesma forma a diferença é que se eu joga-se pelo id do produto eu teria q filtrar por mais alguma outra coisa se n ele pegaria o valores de todos os inseridos até de outras compras de outras pessoas e pelo id do carrinho não é único.

 

e tipo assim a pizza como produto vai com custo de 10 reias em car_valor só que preciso que ele vá em variações e traga o SUM de todos os valores q pertencem a aquele carrinho tipo ele vai trazer sev_valor = 15, sev_valor = 20 ou seja tudo isso no sum vai voltar 35 ai no sql no carrinho eu precio q ele pegue aqueles 10 e some com 35 e e depois multiplique pela quantidade do carrinho ou seja (x + y) * a = xba

x = valor do produto no car_valor

y = valor do produto em variação

a = quantidade

xba = total da operação

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa! isso mesmo.. eu n posso ir pelo id do produto eu vou pelo id do carrinho tipo meu car_id = 2 tem car_produto = 1 e quando eu vou buscar na variação eu busco car_id = sev_carrinho porque meu carrinho é único tipo ele trás o valor da mesma forma a diferença é que se eu joga-se pelo id do produto eu teria q filtrar por mais alguma outra coisa se n ele pegaria o valores de todos os inseridos até de outras compras de outras pessoas e pelo id do carrinho não é único.

Sim mas você pode buscar pelo ID do carrinho e do produto juntos. Eu entendo que não poderia ser só do produto. Mas isso seria a maneira que eu faria, parece que teu jeito tá diferente vamos ver...

 

e tipo assim a pizza como produto vai com custo de 10 reias em car_valor só que preciso que ele vá em variações e traga o SUM de todos os valores q pertencem a aquele carrinho tipo ele vai trazer sev_valor = 15, sev_valor = 20 ou seja tudo isso no sum vai voltar 35 ai no sql no carrinho eu precio q ele pegue aqueles 10 e some com 35 e e depois multiplique pela quantidade do carrinho ou seja (x + y) * a = xba

x = valor do produto no car_valor

y = valor do produto em variação

a = quantidade

xba = total da operação

Ok. Mas cara acho que isso estaria errado... Pois você estaria pegando o SUM de todos os produtos no carrinho (esquece as variações um pouco), que seriam DUAS PIZZAS e UMA COCA, isso resultaria em R$ 14,20 (Só o SUM de valores, 9.90 + 4.30 , sem multiplicar nada, seria o x da tua lógica acima). E então você pegaria este valor x e multiplicaria por 3, a quantidade de produtos no carrinho. Isso te daria um total de R$ 42,60.

 

O que é errado. Imagine o sistema sem as variações, o certo seria você fazer 2 x 9.90 (2 pizzas de nove e noventa) + uma coca de 4.30, resultando em R$ 24,10 pro cliente pagar. As multiplicações de quantidade do produto x valor do produto tem que ser feitas individualmente. Não concorda comigo?

 

Neste meu caso seria necessário ter o ID do produto da segura_variacao como eu disse acima, pra buscar em conjunto com o do carrinho. Mas analisa isso que eu disse, quem sabe você já tenha pensado isso e o teu sistema seja realmente da outra forma. Aí veremos o que podemos fazer.

 

Pra verificar as diferenças que eu citei acima você pode executar estas duas querys abaixo.

 

Maneira 1 que eu citei, a que eu considero errada:

 

SELECT SUM(car_quantidade) * SUM(car_valor) as total FROM carrinho

Maneira 2, a que eu considero correta:

 

SELECT SUM(car_quantidade * car_valor) as total FROM carrinho

Abrass =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

acabamos voltando para o mesmo lugar....

n passo usar SELECT SUM(car_quantidade * car_valor) as total FROM carrinho

isso seria se meu carrinho n tive-se as variações ai sim tava feito... mais ele tem então eu preciso de um inner join q va em segura_variacoes e pegue todos os sev_valores que pertencem ao car_id em questão

 

isso seria simples se todos tive-sem variações como não tem eu preciso de uma consulta q pegue so os q tive entende

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim cara eu entendi, o exemplo que eu te dei ali foi sem as variações. Eu disse pra esquecer um pouco as variações pra poder pensar na lógica do sistema. Tu analisou o que eu disse ali acima?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza vou checar =]

 

Ok cara, eu entendi como funciona. Eu só quero te mostrar o meu jeito de pensar (já que você disse que queria uma opinião), e deixar claro o que você quer.

 

Acompanhe comigo mais uma vez, sem levar em consideração as variações, esquece elas um pouco:

 

Teu carrinho tem:

 

1 Coca de R$ 4.30

2 Pizzas de R$ 20.00

 

Se você pegar a quantidade de produtos no carrinho (TRÊS) e multiplicar pela soma de valores (R$ 24,30), vai dar um resultado errado (Total de R$ 72,90).

 

O correto é você pegar 2 PIZZAS de 20 reais + 1 COCA de 4 e 30.

 

[(2 * 20) + (1 * 4.30)] = 44.30

 

Este é o total adequado, não concorda?

 

Colocando isso na tua lógica do ante-penúltimo post:

 

x = valor do produto no car_valor

y = valor do produto em variação

a = quantidade

xba = total da operação

 

Você disse que queria fazer (x + y) * a = xba, mas como eu acabei de dizer deve ser [(x1 * a1) + (x2 * a2) + ... + (xn * an)] para n produtos no carrinho.

 

Agora pensando novamente com as variações:

 

Você precisa saber qual variação é de que produto, para isso você vai usar o ID do carrinho JUNTO com o ID do produto pra buscar na tabela SEGURA_VARIACAO o valor de cada uma para seu produto.

 

Entende o que eu quero dizer? Agora se você quer pegar o SUM de TODAS as variações na tabela sev independente de qual produto é "dono" de qual variação vai dar um total diferente do que deveria, acredito eu...

 

Vamos debatendo, quem sabe chegamos num consenso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, cara antes de mais nada muito obrigado pela atenção... voltando.. sim ta certo sem as variações você ta certo e eu já fiz assim não só nesse sistema como em outros fica beleza o pipino é quando eu coloco as variações... no sobre o id do produto acho q você n entendeu o q eu falei olhe meu banco assim

 

na minha tabela carrinho eu tenho car_id, car_produto (leva o id do produto), car_quantidade, car_valor

 

e na que eu seguro variáveis eu levo car_id porque? porque ela é única e se eu levar o id do produto na hora do wherer ele vai pegar todos os produtos dentro das variações e eu n quero eu quero q ele traga todas as variações daquele carrinho olha um exemplo me manda te email q eu mando o acesso do cpanel com acesso ao banco ali q se você ver acho q você vai entender

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara hehe

 

Eu já entendi isso que você quis dizer, eu sei que não dá de fazer pelo ID do produto. Mas eu to dizendo pra CONTINUAR com o teu ID do carrinho e TAMBÉM o ID do produto sacas? Mas bem pode ser que o meu raciocínio não seja o ideal neste caso.

 

Eu me cadastrei lá e coloquei meu e-mail, consegue pegar no banco?

 

Senão me avisa que eu te mando aqui mesmo.

 

Fico no aguardo, valeu.

 

Quanto a ajuda, pode dispor tô aqui pra isso =]

 

Se tu entendeu aquele exemplo ali que eu dei acima então eu posso continuar. O que eu pensei era isso:

 

Você estava fazendo [(x1 * a1) + (x2 * a2) + ... + (xn * an)] = Total, no nosso exemplo sem variações. Aí se você tivesse um ID de produto JUNTO com o car_id lá na segura_variacao, tu poderia pegar a variação de cada produto e fazer assim:

 

[((x1 + y1) * a1) + ((x2 + y2) * a2) + ... + ((xn + yn) * an)] = Total

 

Onde o y seria a variação de cada produto que você estaria pegando lá. Desta maneira você estaria pegando cada variação de todos os produtos do seu carrinho e fazendo a multiplicação de forma correta com cada uma e pah e no final teria um total corretinho.

 

Caso você não pegue a variação de cada produto, é obviamente inviável você somar TUDO da tabela segura_variacao em cada conta daquele exemplo que fizemos, então você teria que somar somente uma vez no final, assim:

 

[(x1 * a1) + (x2 * a2) + ... + (xn * an) + y] = Total, onde y = SUM de todas as variações na tabela sev com o id daquele carrinho que queremos.

 

O que tu acha? Eu prefiro a primeira maneira, mais organizada e a correta pra mim. Mas o sistema é teu então você que vê qual a mais adequada.

 

Note que os resultados serão diferentes nas duas maneiras, logo você tem que se basear nisso pra saber qual vai querer.

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.