Jump to content
josegomes9

comparação de dados em tabela

Recommended Posts

josegomes9

tenho numa base dados de serviços, e uma outra onde registo auditoria a estes serviços.

Com o select vou buscar os dados da tabela serviços no entanto preciso que seja feita verificação se aquele serviço já voi inserido naquele mês as tabelas de relacionam por id, a validação de se foi ou não inserida é feita na data.

exemplo das tabelas:

CREATE TABLE IF NOT EXISTS `auditoria` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_prestador` int(11) NOT NULL,
  `auditor` int(11) NOT NULL,
  `data` varchar(150) NOT NULL,
  `dataserv` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `localidade` int(11) NOT NULL,
  `lugar` int(11) NOT NULL,
  `componente` int(11) NOT NULL,
  `pont_atribuida` varchar(25) NOT NULL,
  `pontos_efectivos` varchar(25) NOT NULL,
  `id_servi` int(11) NOT NULL,
  `distrito` int(11) NOT NULL,
  `total` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `local` (`localidade`,`lugar`,`componente`,`pont_atribuida`,`pontos_efectivos`),
  KEY `id_prestador` (`id_prestador`),
  KEY `auditor` (`auditor`),
  KEY `local_2` (`localidade`),
  KEY `lugar` (`lugar`),
  KEY `componente` (`componente`),
  KEY `id_servi` (`id_servi`),
  KEY `distrito` (`distrito`),
  KEY `pontos_efectivos` (`pontos_efectivos`),
  KEY `pont_atribuida` (`pont_atribuida`),
  KEY `total` (`total`),
  KEY `total_2` (`total`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

--
-- Extraindo dados da tabela `auditoria`
--

INSERT INTO `auditoria` (`id`, `id_prestador`, `auditor`, `data`, `dataserv`, `localidade`, `lugar`, `componente`, `pont_atribuida`, `pontos_efectivos`, `id_servi`, `distrito`, `total`) VALUES
(1, 1, 1, '11/03/2011', '2011-03-09 15:01:09', 1, 1, 3, '0.5', '23', 1, 3, 11.5),
(2, 2, 2, '28/01/2011 19:47', '2011-02-19 11:47:28', 33, 2, 2, '0.5', '60', 2, 2, 60),
(3, 1, 2, '18/01/2011 21:11', '2011-02-19 11:47:28', 1, 1, 7, '0.5', '80', 3, 1, 0),
(5, 2, 2, '10/03/2011', '2011-03-09 15:01:43', 33, 2, 2, '0.5', '60', 2, 2, 30),
(6, 1, 2, '08/02/2011', '2011-02-19 11:47:28', 1, 1, 7, '0.5', '80', 3, 1, 40),
(7, 1, 1, '11/03/2011', '2011-03-09 15:01:24', 1, 1, 3, '0', '23', 1, 3, 11.5),
(8, 1, 2, '01/02/2011', '2011-02-19 11:46:44', 1, 1, 7, '1', '80', 3, 1, 80),
(9, 1, 2, '06/02/2011', '2011-02-18 19:02:46', 1, 1, 7, '1', '80', 3, 1, 80),
(10, 1, 2, '08/02/2011', '2011-02-18 19:03:06', 1, 1, 7, '0.5', '80', 3, 1, 40),
(11, 1, 2, '06/02/2011', '2011-02-18 19:03:32', 1, 1, 7, '1', '80', 3, 1, 80),
(12, 1, 2, '10/02/2011', '2011-03-09 10:17:26', 1, 1, 7, '1', '80', 3, 1, 80);

-- --------------------------------------------------------

--
-- Estrutura da tabela `servico`
--

CREATE TABLE IF NOT EXISTS `servico` (
  `id_serv` int(11) NOT NULL AUTO_INCREMENT,
  `componente` int(255) NOT NULL,
  `descricao_traba` text NOT NULL,
  `piso` varchar(150) NOT NULL,
  `cidade` int(11) NOT NULL,
  `distrito` int(11) NOT NULL,
  `nome_local_comercial` int(11) NOT NULL,
  `auditor_atribuido` int(150) DEFAULT NULL,
  `supervisor` int(11) DEFAULT NULL,
  `id_prestador` int(11) DEFAULT NULL,
  `limp_anuais` varchar(2) NOT NULL,
  `limp_periodicas` varchar(2) NOT NULL,
  `limp_mensais` varchar(2) NOT NULL,
  `n_limpesas` varchar(10) NOT NULL,
  `id_pont` int(11) NOT NULL,
  `tipo_limpeza` int(11) NOT NULL,
  PRIMARY KEY (`id_serv`),
  KEY `componente` (`componente`,`cidade`,`distrito`,`auditor_atribuido`,`id_prestador`,`id_pont`,`tipo_limpeza`),
  KEY `cidade` (`cidade`),
  KEY `distrito` (`distrito`),
  KEY `auditor_atribuido` (`auditor_atribuido`),
  KEY `id_prestador` (`id_prestador`),
  KEY `id_pont` (`id_pont`),
  KEY `id_local` (`tipo_limpeza`),
  KEY `nome_local_comercial` (`nome_local_comercial`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Extraindo dados da tabela `servico`
--

INSERT INTO `servico` (`id_serv`, `componente`, `descricao_traba`, `piso`, `cidade`, `distrito`, `nome_local_comercial`, `auditor_atribuido`, `supervisor`, `id_prestador`, `limp_anuais`, `limp_periodicas`, `limp_mensais`, `n_limpesas`, `id_pont`, `tipo_limpeza`) VALUES
(1, 3, 'teste limpesa', '1', 1, 3, 1, 1, NULL, 1, 'Y', 'Y', 'Y', '2s', 23, 2),
(2, 2, 'Deve ser limpo sempre', '2', 33, 2, 2, 2, 3, 2, 'N', 'Y', 'Y', '2S', 60, 4),
(3, 7, 'teste', '2', 1, 1, 1, 2, 3, 1, 'N', 'Y', 'Y', '2S', 80, 8),
(4, 13, 'Deve ser limpo sempre', '2', 1, 1, 2, 2, 3, 2, 'N', 'Y', 'Y', '2S', 43, 1);

já tentei com iner join mas

Share this post


Link to post
Share on other sites
IvanGS

usem as tag's de code

em cima está um " # "

depois faz-se

[ code = sql ][ /code ]

e cola-se o código entre as tags para ficar assim:

CREATE TABLE IF NOT EXISTS `auditoria` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_prestador` int(11) NOT NULL,
  `auditor` int(11) NOT NULL,
  `data` varchar(150) NOT NULL,
  `dataserv` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `localidade` int(11) NOT NULL,
  `lugar` int(11) NOT NULL,
  `componente` int(11) NOT NULL,
  `pont_atribuida` varchar(25) NOT NULL,
  `pontos_efectivos` varchar(25) NOT NULL,
  `id_servi` int(11) NOT NULL,
  `distrito` int(11) NOT NULL,
  `total` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `local` (`localidade`,`lugar`,`componente`,`pont_atribuida`,`pontos_efectivos`),
  KEY `id_prestador` (`id_prestador`),
  KEY `auditor` (`auditor`),
  KEY `local_2` (`localidade`),
  KEY `lugar` (`lugar`),
  KEY `componente` (`componente`),
  KEY `id_servi` (`id_servi`),
  KEY `distrito` (`distrito`),
  KEY `pontos_efectivos` (`pontos_efectivos`),
  KEY `pont_atribuida` (`pont_atribuida`),
  KEY `total` (`total`),
  KEY `total_2` (`total`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

--
-- Extraindo dados da tabela `auditoria`
--

INSERT INTO `auditoria` (`id`, `id_prestador`, `auditor`, `data`, `dataserv`, `localidade`, `lugar`, `componente`, `pont_atribuida`, `pontos_efectivos`, `id_servi`, `distrito`, `total`) VALUES
(1, 1, 1, '11/03/2011', '2011-03-09 15:01:09', 1, 1, 3, '0.5', '23', 1, 3, 11.5),
(2, 2, 2, '28/01/2011 19:47', '2011-02-19 11:47:28', 33, 2, 2, '0.5', '60', 2, 2, 60),
(3, 1, 2, '18/01/2011 21:11', '2011-02-19 11:47:28', 1, 1, 7, '0.5', '80', 3, 1, 0),
(5, 2, 2, '10/03/2011', '2011-03-09 15:01:43', 33, 2, 2, '0.5', '60', 2, 2, 30),
(6, 1, 2, '08/02/2011', '2011-02-19 11:47:28', 1, 1, 7, '0.5', '80', 3, 1, 40),
(7, 1, 1, '11/03/2011', '2011-03-09 15:01:24', 1, 1, 3, '0', '23', 1, 3, 11.5),
(8, 1, 2, '01/02/2011', '2011-02-19 11:46:44', 1, 1, 7, '1', '80', 3, 1, 80),
(9, 1, 2, '06/02/2011', '2011-02-18 19:02:46', 1, 1, 7, '1', '80', 3, 1, 80),
(10, 1, 2, '08/02/2011', '2011-02-18 19:03:06', 1, 1, 7, '0.5', '80', 3, 1, 40),
(11, 1, 2, '06/02/2011', '2011-02-18 19:03:32', 1, 1, 7, '1', '80', 3, 1, 80),
(12, 1, 2, '10/02/2011', '2011-03-09 10:17:26', 1, 1, 7, '1', '80', 3, 1, 80);

-- --------------------------------------------------------

--
-- Estrutura da tabela `servico`
--

CREATE TABLE IF NOT EXISTS `servico` (
  `id_serv` int(11) NOT NULL AUTO_INCREMENT,
  `componente` int(255) NOT NULL,
  `descricao_traba` text NOT NULL,
  `piso` varchar(150) NOT NULL,
  `cidade` int(11) NOT NULL,
  `distrito` int(11) NOT NULL,
  `nome_local_comercial` int(11) NOT NULL,
  `auditor_atribuido` int(150) DEFAULT NULL,
  `supervisor` int(11) DEFAULT NULL,
  `id_prestador` int(11) DEFAULT NULL,
  `limp_anuais` varchar(2) NOT NULL,
  `limp_periodicas` varchar(2) NOT NULL,
  `limp_mensais` varchar(2) NOT NULL,
  `n_limpesas` varchar(10) NOT NULL,
  `id_pont` int(11) NOT NULL,
  `tipo_limpeza` int(11) NOT NULL,
  PRIMARY KEY (`id_serv`),
  KEY `componente` (`componente`,`cidade`,`distrito`,`auditor_atribuido`,`id_prestador`,`id_pont`,`tipo_limpeza`),
  KEY `cidade` (`cidade`),
  KEY `distrito` (`distrito`),
  KEY `auditor_atribuido` (`auditor_atribuido`),
  KEY `id_prestador` (`id_prestador`),
  KEY `id_pont` (`id_pont`),
  KEY `id_local` (`tipo_limpeza`),
  KEY `nome_local_comercial` (`nome_local_comercial`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Extraindo dados da tabela `servico`
--

INSERT INTO `servico` (`id_serv`, `componente`, `descricao_traba`, `piso`, `cidade`, `distrito`, `nome_local_comercial`, `auditor_atribuido`, `supervisor`, `id_prestador`, `limp_anuais`, `limp_periodicas`, `limp_mensais`, `n_limpesas`, `id_pont`, `tipo_limpeza`) VALUES
(1, 3, 'teste limpesa', '1', 1, 3, 1, 1, NULL, 1, 'Y', 'Y', 'Y', '2s', 23, 2),
(2, 2, 'Deve ser limpo sempre', '2', 33, 2, 2, 2, 3, 2, 'N', 'Y', 'Y', '2S', 60, 4),
(3, 7, 'teste', '2', 1, 1, 1, 2, 3, 1, 'N', 'Y', 'Y', '2S', 80, ,
(4, 13, 'Deve ser limpo sempre', '2', 1, 1, 2, 2, 3, 2, 'N', 'Y', 'Y', '2S', 43, 1);

Share this post


Link to post
Share on other sites
josegomes9

Tenho o select que me vai buscar a listagem de componentes a auditar naquela semana ou mês, clico em auditar e vou para o formulário de inserir auditoria, após inserção reencaminha novamente para a listagem onde vou seleccionar outro componente a auditar só que aqui quero que o que já foi inserido não apareça na listagem, visto ja ter sido auditado.

Obrigado

José Gomes

Share this post


Link to post
Share on other sites
IvanGS

adcionas um campo na DB com a data

depois fazes a comparação entre a data da DB com a do sistema.

se for igual não mostra

se for diferente mostra

Share this post


Link to post
Share on other sites
josegomes9

sim já coloquei se veres na tabela auditoria tem o campo data, e o id_servi que faz a ligação entres as tabelas tentei o código abaixo mas em vez de retomar somente os registos da tabela serviços retoma das duas tabelas.

<?php
$data=date("d/m/Y");
mysql_select_db($database_pcclean, $pcclean);
$query_Recordset1 = "SELECT distinct auditoria.*, servico.* FROM ( servico Right OUTER join auditoria ON auditoria.data > $data) ";
$Recordset1 = mysql_query($query_Recordset1, $pcclean) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
<?php 
// Show IF Conditional region2 
if (@$row_Recordset1['id_servi'] == @$row_Recordset1['id_serv']) {
?>
<?php do { ?>
<?php 
// Show IF Conditional region1 
if (@$row_Recordset1['data'] <> $data) { ?>
<p><?php echo $row_Recordset1['id_serv']; ?> <strong></strong></p>
<p><?php echo $row_Recordset1['descricao_traba']; ?></p>
<?php } 
// endif Conditional region1
?>
<?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
<?php echo $data?>
<?php } 
// endif Conditional region2
?>

obrigado.

Share this post


Link to post
Share on other sites
IvanGS

esta tag era de php e metes-te mal, faz assim: "[ code=php ][ /code ]"

<?php
$data=date("d/m/Y");
mysql_select_db($database_pcclean, $pcclean);
$query_Recordset1 = "SELECT distinct auditoria.*, servico.* FROM ( servico Right OUTER join auditoria ON auditoria.data > $data) ";
$Recordset1 = mysql_query($query_Recordset1, $pcclean) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
<?php 
// Show IF Conditional region2 
if (@$row_Recordset1['id_servi'] == @$row_Recordset1['id_serv']) {
?>
<?php do { ?>
<?php 
// Show IF Conditional region1 
if (@$row_Recordset1['data'] <> $data) { ?>
<p><?php echo $row_Recordset1['id_serv']; ?> <strong></strong></p>
<p><?php echo $row_Recordset1['descricao_traba']; ?></p>
<?php } 
// endif Conditional region1
?>
<?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
<?php echo $data?>
<?php } 
// endif Conditional region2
?>

Share this post


Link to post
Share on other sites
IvanGS

optimiza o teu código

abre as tag's php e fecha-as só quando precisares.

não precisas de abrir e fechar em todas as linhas...

eu lgo mais para o fim já vejo o teu código pq agora estou a trabalhar e não posso

Share this post


Link to post
Share on other sites
scorch

@josegomes9 não uses o @ antes das funções, quebra muito a performance. :thumbsup:


PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
josegomes9

As keys na tabela foi erro que já retirei só tenho key no ID e ID_Servi

Share this post


Link to post
Share on other sites
josegomes9

E aí pessoal esta estava sendo dificil já resolvi posto aqui a solução se quiserem dar sugestões de melhoria estejam a vontade.

<?php require_once('Connections/pcclean.php'); ?>
<?php
mysql_select_db($database_pcclean, $pcclean);
$query_Recordset1 = "SELECT DISTINCT servico.id_serv, servico.componente, servico.descricao_traba, servico.piso, servico.cidade, servico.distrito, servico.nome_local_comercial, servico.auditor_atribuido, servico.supervisor, servico.id_prestador, servico.limp_anuais, servico.limp_periodicas, servico.limp_mensais, servico.n_limpesas, servico.id_pont, servico.tipo_limpeza, auditoria.data FROM (servico LEFT JOIN auditoria ON auditoria.id_servi=servico.id_serv)  GROUP BY servico.id_serv";
$Recordset1 = mysql_query($query_Recordset1, $pcclean) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
  <?
$data=date("d/m/Y");
echo $data;
?>
</p>
<?php do { ?>
  <?php 
// Show IF Conditional region1 
if ($row_Recordset1['data'] <> "$data") {
?>
    <p><?php echo $row_Recordset1['id_serv']; ?> </p>
    <p><?php echo $row_Recordset1['descricao_traba']; ?></p>
    <?php } 
// endif Conditional region1
?>
  <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
<?php
mysql_free_result($Recordset1);
?>

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.