Ir para conteúdo

POWERED BY:

Arquivado

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

Jhon Paulo

subtrair valores de uma consulta direto no mysql

Recommended Posts

Olá galera,

to fazendo um sistema pra biblioteca, só que to querendo otimizar uma consulta.

 

Bom, meu problema é o seguinte: Eu preciso saber quantos itens de uma categoria estão disponíveis(ex. livro de HTML5)

 

minha tabela ta desse jeito:

catalogo (id, nome, imagem, desc, etc); // id: identificação; o resto é intuitivo...

n_catalogo(cod, id_catalogo, disponivel); //cod: identificação do item; id_catalogo: referencia para o catalogo; disponivel: verificar se está disponível para ser alugado ou apenas ser visto na biblioteca;

emprestimo (id, id_usuario, cod, status); //id: identificação; id_usuario: referencia ao usuário; cod: saber qual item pegou; status: verifica se ainda está alugado ou já foi devolvido.

 

daí estou utilizando essa função pra saber quantos itens estão disponíveis:

function quantDisponivel ($id_catalogo) {
	$sql_n_catalogo = mysql_query("SELECT COUNT(*) FROM n_catalogo WHERE id_catalogo=$id_catalogo"); //caça quantos itens tem
	$arr_num_nc = mysql_fetch_row($sql_n_catalogo);// joga o valor num array
	$n_catalogo = $arr_num_nc[0]; //pega o valor
	$sql_emprestimo = mysql_query("SELECT COUNT( * ) FROM emprestimo AS e INNER JOIN n_catalogo AS c ON e.cod = c.cod WHERE c.id_catalogo=$id_catalogo AND e.status=true"); //caça quantos itens já estão alugados..
	$arr_num_emp = mysql_fetch_row($sql_emprestimo);
	$n_emprestimo = $arr_num_res[0];
	$disponivel=$n_catalogo-$n_emprestimo;
	return "Disponível: $disponivel";//subtrai o total de itens-total de reserva.. totalizando os ítens disponíveis :)
}
//pra usar a função uso:
echo quantDisponivel(8);

 

eu quero otimizar minha consulta.. 'to fazendo duas' e to subtraindo em PHP... ta muito bom não :s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius Rangel, acho que você não entendeu :s

eu preciso apenas pegar o valor do (total de itens)-(total de itens reservados) de um determinado catálogo e mostrar para o usuário final do meu site. Nada mais.

 

agora explico melhor:

 

exemplo: tem o livro do Harry Potter e a Pedra Filosofal na tabela catalogo(o id=1)

só que eu tenho mais de 1 livro do Harry Potter e a Pedra Filosofal(eu tenho 3, por exemplo);

aí eu cadastro os 3 livros na tabela n_catalogo(ex. cod: livrohp1 e id_categoria=1; cod: livrohp2 e id_categoria=1; cod: livrohp3= e id_categoria=1;) através do id_categoria eu sei que os 3 são do Harry Potter e a Pedra Filosofal;

 

daí eu tenho que saber quantos livros estão disponíveis para ler e/ou levar para casa e mostrar pro usuário final do meu site.

 

faço uma pesquisa na tabela n_catalogos pra saber quantos do itens tem o id_categoria=1;

 

depois faço uma pesquisa na tabela reserva pra saber se os livros já estão emprestados;

 

no final faço o seguinte: (total de livros: 3 no nosso exemplo)-(total dos livros emprestados: 1)(3-1);

 

daí mostro pro usuário o número 2

 

estou gastando 6 linhas de códigos(entrando no mysql, voltando no php, entrando no mysql, voltando no php...)

 

entendeu? não está valendo o esforço :s

 

por favor, não me chame de paranóico rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

 $sql_n_catalogo = mysql_query("SELECT COUNT(*), (SELECT COUNT( * ) FROM emprestimo AS e INNER JOIN n_catalogo AS c ON e.cod = c.cod WHERE c.id_catalogo=$id_catalogo AND e.status=true) as emprestimo FROM n_catalogo WHERE id_catalogo=$id_catalogo")

 

tente trabalhar com subconsulta

agora você acessando $sql_n_catalogo['emprestismo'] você tem o valor da subconsulta

 

e não é paranoico não, tem que sempre buscar melhorar..

 

espero ter ajudado dessa vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

infelizmente,

$sql_n_catalogo['emprestimo']

não me retorna nenhum valor..

 

mas uma consulta direto no mysql funciona direitinho

 

funcionou desse jeito:

 

$sql_n_catalogo = mysql_query("SELECT COUNT(*) as n, (SELECT COUNT( * ) FROM emprestimo AS e INNER JOIN n_catalogo AS c ON e.cod = c.cod WHERE c.id_catalogo=$id_catalogo AND e.status=true) as emprestimo FROM n_catalogo WHERE id_catalogo=$id_catalogo");
$n=mysql_fetch_array($sql_n_catalogo);
echo $n['n']-$n['emprestimo'];

 

esse é o jeito mais certo de pegar o resultado? só sei assim :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim a utilização dos inner é correta.

 

bom do jeito que te falei se dar o print_r no seu array não retorna o emprestimo?

 

de qualquer modo esta correto o seu jeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ata muito obrigado...

o print_r não retorna nada.. :[

mas ta ok, me ajudou bastante com a consulta! (6 linhas viraram 3 ta ótimo!)

 

var_dump($sql_n_catalogo['emprestimo']); //esse retorna: null
var_dump($sql_n_catalogo); //esse retorna: resource(5, mysql result)

print_r($sql_n_catalogo['emprestimo']); //esse nao retorna nada.. :/
print_r($sql_n_catalogo); // esse retorna: Resource id #5

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.