Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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
$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.
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 :/
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.
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
faz só uma consulta e usa IF ELSE para fazer as condições
if($sql->status == true){
//itens já alugado
}