Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
pessoal, to com esse código,
ta listando tudo certinho.
o que ele faz:
tenho uma tabela chama servicos e outra chamada orcamentos. na servico em uma coluna salvo
os id's da tabela orcamento,
ou seja, um servico pode conter varios orcamentos. e na coluna separo por virgula.
ja consegui fazer listagem certinha de valores e tal.
agora só preciso somar os valores dos orcamentos pra dar um valor final do servico.
<?php $lista = $servico['idorcamento'];
$array = explode(',', $lista);
foreach ($array as $cod) {
$sql = "SELECT * FROM orcamentos WHERE id = '$cod'";
$query = mysql_query($sql);
while ($linha = mysql_fetch_array($query, MYSQL_ASSOC))
{
echo "<tr align=center>";
echo "<td>{$linha['id']}</td>";
echo "<td>{$linha['servico']}</td>";
echo "<td>{$linha['altura']} - {$linha['largura']}</td>";
echo "<td>{$linha['valor']}</td>";
echo "<td></td>";
echo "<td></td>";
}
}?>
valeo galera \o/
>
Você pode fazer isso usando o SUM() do mysql.
$sql = "SELECT id, servico, altura, valor, SUM(valor) as valorTotal FROM orcamentos WHERE id = '$cod'";
Aqui você recupera o valor com '$linha['valorTotal']'
deu nao, ele só listo os valores que tem la na bd :S
>
deu nao, ele só listo os valores que tem la na bd :S
Provavelmente não deu por causa da condição no 'where'.
>
Provavelmente não deu por causa da condição no 'where'.
e qual o jeito certo de fazer ? :S
99% de chance de essa sua coluna id na tabela orcamentos ser a chave primária.
Sendo assim, JAMAIS dará certo, pois a coluna marcada como chave-primária, salvo situações específicas (as quais eu nunca vi) são, também, marcadas como AUTO_INCREMENT.
Isso significa que a cada novo orçamento feito, essa coluna terá um número diferente e ao utilizar aquela cláusula WHERE você SEMPRE vai ter um único registro, se a condição se satisfizer, ou nenhum, se não.
A relação entre orçamento e serviço é de um para muitos, já a relação entre orçamento e cliente é, ou deveria ser, de um para um, sendo assim, você deveria ter uma coluna na tabela orcamentos como chave estrangeira do ID do cliente, já que provavelmente você tem uma tabela clientes.
Assim, quando você buscar todos os orçamentos disponíveis, ao invés de limitar a consulta pelo ID do orçamento, você limita por essa chave estrangeira e todos os orçamentos daquele cliente aparecerão.
A estrutura dessa possibilidade seria:
-- phpMyAdmin SQL Dump
-- version 3.4.5
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jun 06, 2012 at 03:34 PM
-- Server version: 5.5.16
-- PHP Version: 5.3.8
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
--
-- Database: imasters
--
-- --------------------------------------------------------
--
-- Table structure for table budgets
--
CREATE TABLE IF NOT EXISTS `budgets` (
`bid` int(5) NOT NULL AUTO_INCREMENT,
`sid` int(5) NOT NULL,
`cid` int(5) NOT NULL,
PRIMARY KEY (`bid`),
KEY `sid` (`sid`),
KEY `cid` (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf16 AUTO_INCREMENT=4 ;
--
-- Dumping data for table budgets
--
INSERT INTO budgets (bid, sid, cid) VALUES
(1, 1, 1),
(2, 2, 1),
(3, 3, 2);
-- --------------------------------------------------------
--
-- Table structure for table clients
--
CREATE TABLE IF NOT EXISTS `clients` (
`cid` int(5) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- Dumping data for table clients
--
INSERT INTO clients (cid, name) VALUES
(1, 'Bruno Augusto'),
(2, 'Neto Celino');
-- --------------------------------------------------------
--
-- Table structure for table services
--
CREATE TABLE IF NOT EXISTS `services` (
`sid` int(5) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
--
-- Dumping data for table services
--
INSERT INTO services (sid, name) VALUES
(1, 'Desenvolvimento de Sites'),
(2, 'Responde à Dúvidas'),
(3, 'Elaborar Orçamentos'),
(4, 'Cobrar Serviços');
--
-- Constraints for dumped tables
--
--
-- Constraints for table budgets
--
ALTER TABLE `budgets`
ADD CONSTRAINT `budgets_ibfk_2` FOREIGN KEY (`cid`) REFERENCES `clients` (`cid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD CONSTRAINT `budgets_ibfk_1` FOREIGN KEY (`sid`) REFERENCES `services` (`sid`) ON DELETE NO ACTION ON UPDATE NO ACTION;
E a query que lista os resultados:
SELECT c.name as client, s.name as services
FROM budgets b
LEFT JOIN `clients` c ON( c.cid = b.cid )
LEFT JOIN `services` s ON( s.sid = b.sid )
WHERE c.cid = 1
GROUP BY c.cid, s.sid
Isso, no phpMyAdmin, resultou em duas ocorrências de duas colunas, sendo client com meu nome (porque sou o cliente de ID = 1) e services com o serviços prestados.
Quando passar ao PHP você iteraria pelos serviços, mostraria o nome uma vez e, se quisesse mostrar o total de serviços prestados, bastaria contar o número de registros.
Espero que ajude e, aos mais experientes em SQL, se quiserem/puderem dar umas cutucadas no meu código, eu agradeço, já que não sou tão bom com queries complexas.
Você pode fazer isso usando o SUM() do mysql.
Aqui você recupera o valor com '$linha['valorTotal']'