Ir para conteúdo

Arquivado

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

vinicius015

Select com eliminação de resultados

Recommended Posts

Pessoal, boa tarde.

 

To montando um sistema de visitas.

 

Tenho um form que tem o ID de um CLIENTE, que vem em um FORM SELECT e neste mesmo form, tenho o campo hidden que pega data atual para inserir na tabela RELATÓRIO FINAL

 

vamos supor..

 

ID PRODUTO

1 CLIENTE1

2 CLIENTE2

3 CLIENTE3

 

Eu seleciono o cliente 1, preencho uma informação que tenho q preencher e insiro. até ai legal, funciona...

 

Sò que quando ele inseri a informação ele volta para a página de cadastro, ai queria ELIMINIAR O CLIENTE1 da lista do form select pelo fato do mesmo já ter sido inserido naquela data.

 

O FORM SELECT puxa os nomes e o id's do cliente das tabela CLIENTES, e deveria consultar a tabela RELATÓRIO FINAL, ver se algum dos clientes já foram visitados e inseridos os dados na DATA ATUAL e se já VISITADO ele elimina da listagem do FORM SELECT, caso não tenha sido registrado nenhuma visita ele mostra todos normalmente até que sejam registrados e eliminados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Giesta, ai vai o códio do FORM SELECT...

<select name="idpiscinaespelho">
<option value="01">- - Selecione - -</option>
<?php
$conexao = mysql_connect("dbmy0044.whservidor.com", "qualytratu_2", "xxxx") or die ('Erro na conexão.');
mysql_select_db("qualytratu_2", $conexao);
$sql = "SELECT idp, idcondominio, nomepiscinaespelho FROM piscinasespelhos WHERE idcondominio='$codigo'"; //FUNCIONA
//$sql = "SELECT * FROM piscinasespelhos FULL OUTER JOIN relatoriofinal
//ON piscinasespelhos.idp = relatoriofinal.idpiscinaespelho
//WHERE relatoriofinal.dataehora = CURRENT_DATE() AND idcondominio='$codigo'";
$qry = mysql_query($sql, $conexao);
while ($dados=mysql_fetch_array($qry)) {
$selecionado=$dados['idp']==$_POST['nomepiscinaespelho']?" selected":null;
echo "<option value=\"$dados[idp]\" $selecionado>$dados[nomepiscinaespelho]</option>";
}
?>
</select>

Compartilhar este post


Link para o post
Compartilhar em outros sites
$sql="SELECT * FROM piscinasespelhos.piscinas, realtoriofinal.relatorio WHERE piscinas.ipd=relatorio.idpiscinasespelhos AND relatorio.dataehora=current_date() AND piscinas.idcondominio=$codigo";
Isso? '-'

Compartilhar este post


Link para o post
Compartilhar em outros sites

A dúvida é sobre MySQL, não vou utilizar as tags do PHP. Nunca fiz uso do OUTER JOIN, portanto não sei como funciona especificamente.

 

Mas vamos analisar:

SELECT *
FROM piscinasespelhos # tabela de clientes
FULL OUTER JOIN relatoriofinal # tabela de clientes visitados
  ON piscinasespelhos.idp = relatoriofinal.idpiscinaespelho # relacionamento entre as tabelas
WHERE
  relatoriofinal.dataehora = CURRENT_DATE() # filtra o relatório para exibir somente esta data (atual)
  AND idcondominio='$codigo' # id do condominio

A tabela `piscinaespelhos` contém o cadastro de todos os clientes e a tabela `relatoriofinal`, como o próprio nome já diz, contém o relatório final de clientes visitados.

 

Como não sei como o OUTER JOIN funciona na prática, e sei que com LEFT JOIN funciona, e inclusive, você pode executar uma consulta no lugar destas duas, portanto, farei esta substituição.

 

Primeiro a SQL para exibir todos os campos necessários da tabela `piscinaespelhos`:

SELECT
  p.idp,
  p.idcondominio,
  p.nomepiscinaespelho
FROM piscinasespelhos AS p # tabela de clientes sob o ALIAS (apelido) p
WHERE
  p.idcondominio='$codigo' # id do condominio

O LEFT JOIN verifica o relacionamento entre a tabela principal e a tabela secundária, priorizando a tabela a esquerda (no nosso caso será a tabela `piscinasespelho`), retornando todos os registros da tabela prioritária e somente os registros da tabela secundária se houver algum relacionamento (a tabela secundária será a tabela `relatoriofinal`, se não filtrarmos data, todas as visitas já cadastradas na tabela secundária serão exibidos).

SELECT
  p.idp AS idpiscina,
  p.idcondominio AS idcondominio,
  p.nomepiscinaespelho AS nome,
  r.dataehora AS horariovisita,
  IF( r.idpiscinaespelho IS NULL, 'nao', 'sim' ) AS visitado
# Criterio visita:
# Se não houver relacionamento para a data passada no JOIN, exibe 'nao', mas se houver, exibe 'sim'
FROM piscinasespelhos AS p # tabela de clientes sob o ALIAS (apelido) p
LEFT JOIN relatoriofinal AS r # tabela de visitas sob o ALIAS (apelido) r
  ON r.idpiscinaespelho = p.idp # encontra o cliente
  AND r.dataehora = CURRENT_DATE() # limita o relacionamento para o que foi visitado hoje
WHERE
  p.idcondominio='$codigo' # id do condominio

Esta seria a SQL no meu entendimento, é interessante que comente a linha 12 ("AND r.dataehora = CURRENT_DATE()") para ver o que seria exibido sem informar a data.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lokodomau, WictorP e Giesta,

 

Obrigado pela prontidão em me ajudar...

 

Deixa eu explicar de uma forma mais simples...

 

Tenho a página cadastro.php, onde tenho o FORM SELECT que puxa da tabela "piscinaseespelhos" as piscinas e/ou espelhos cadastrados em um certo ID PRIMÁRIO de um cliente.

 

Ele puxa as informações corretamente, porém essa página de cadastro é uma página de cadastro de vistoria.

 

Portanto eu precisava que, toda vez que a página cadastro.php fosse aberta, o FORM SELECT antes de mostrar os valores da tabela "piscnaseespelhos" do determinado cliente, ele consultasse se algumas dessas piscinas ou espelhos já teriam sido vistoriadas no dia atual.

 

Caso vistoriadas, ele eliminaria o resultado.

 

Caso não, ele deixaria a disposição para que fosse feito a vistoria.

 

Acredito que tenha facilitado neh rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade pode se fazer tanto com PHP quanto por SQL...

 

Vamos fazer uma suposição aqui...

 

Hierarquia das tabelas

 

TABLE piscinas
ID PISCINA APARTAMENTO
 
//
 
TABLE piscinas_vistas
ID PISCINA DATA

Em SQL...

 

SELECT * FROM piscinas.piscinas, piscinas_vistas.vistas WHERE vistas.piscina=piscinas.id AND data=(função strtotime)
http://php.net/manual/pt_BR/function.strtotime.php

 

Em PHP...

 

$sql = mysql_query("SELECT * FROM piscinas ORDER BY id DESC");
while($ver = mysql_fetch_array($sql)) {
 $consulta = mysql_query("SELECT * FROM piscinas_vistas WHERE piscina='".$ver['id']."' AND data=(função strtotime)");
 if(mysql_num_rows($consulta) == 0) {
  // retorna se não tiver sido visto
 }else {
  // retorna se tiver sido visto
 }
}
http://php.net/manual/pt_BR/function.strtotime.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite,

 

Rapaz, você poderia criar um outra tabela que guardasse estes vistoriados e ai faria mais ou menos assim

<select required >
<option></option>
<?php
while($row = $primeiroArray ->fetch_assoc())
{
$query = mysql_query("SELECT *FROM  vistoriados WHERE produto_id =".$row['id_produto']);
while($r = $query ->fetch_assoc())
{
$mostra .= "<option value=' ".$row['id_produto']." '>".$row['produto_nome']."</option>";
}
}
echo $mostra;
?>
</select>
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opaa... Conseguimos...

ai vai a cura para este mau rs

abraços...

$sql2 = "SELECT idp, idcondominio, nomepiscinaespelho
FROM piscinasespelhos
WHERE
idp NOT IN(
     SELECT idpiscinaespelho FROM relatoriofinal
     WHERE dataehora = CURDATE()
     )
AND
idcondominio='$codigo'";

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.