Problema com SQL utilizando datas e while.
boa noite a todos,
sou iniciante no mysql e como era de se esperar, estou tomando uma surra dele... rsrs
gostaria que me dessem uma dica com relação ao PHP abaixo usando SQL, pois não está funcionando.
tenho duas tabelas, conforme abaixo, que estão com esses registros:
tb_cliente
id chave_atual
1 123456789
tb_licenca
id data_inicial data_final chave
1 2010-04-01 2010-04-30 123456789
O que eu quero na verdade é que de acordo com a data de hoje eu encontre um registro na tabela tb_licenca. Também preciso localizar um registro na tabela tb_cliente que tem o id = 1. Com esses dois selects e o while, eu obtenho da tabela tb_cliente, um valor do campo "chave_atual", e na tabela tb_licenca, um valor do campo "chave".
Após isso, comparo os valores com o IF, que se eles forem diferentes aparecerá a mensagem do script abaixo, e se forem igual vem um ELSE executando o que preciso.
$data = date("Y-m-d");
$select_chave = mysql_query("SELECT * FROM tb_licenca WHERE data_inicial >= '$data' AND data_final <= '$data'");
$select_chave_atual = mysql_query("SELECT * FROM tb_cliente WHERE id == '1'");
while($registro = mysql_fetch_array($select_chave)){
$chave_db = $registro['chave'];
}
while($registro2 = mysql_fetch_array($select_chave_atual)){
$chave_atual_db = $registro2['chave_atual'];
}
if($chave_db != $chave_atual_db){
echo"
<META HTTP-EQUIV=REFRESH CONTENT='0; URL=pga_login.php'>
<script type=\"text/javascript\">
alert(\"Licença de uso inválida. Favor atualizar.\");
</script>>";
}
sou iniciante no mysql e como era de se esperar, estou tomando uma surra dele... rsrs
gostaria que me dessem uma dica com relação ao PHP abaixo usando SQL, pois não está funcionando.
tenho duas tabelas, conforme abaixo, que estão com esses registros:
tb_cliente
id chave_atual
1 123456789
tb_licenca
id data_inicial data_final chave
1 2010-04-01 2010-04-30 123456789
O que eu quero na verdade é que de acordo com a data de hoje eu encontre um registro na tabela tb_licenca. Também preciso localizar um registro na tabela tb_cliente que tem o id = 1. Com esses dois selects e o while, eu obtenho da tabela tb_cliente, um valor do campo "chave_atual", e na tabela tb_licenca, um valor do campo "chave".
Após isso, comparo os valores com o IF, que se eles forem diferentes aparecerá a mensagem do script abaixo, e se forem igual vem um ELSE executando o que preciso.
$data = date("Y-m-d");
$select_chave = mysql_query("SELECT * FROM tb_licenca WHERE data_inicial >= '$data' AND data_final <= '$data'");
$select_chave_atual = mysql_query("SELECT * FROM tb_cliente WHERE id == '1'");
while($registro = mysql_fetch_array($select_chave)){
$chave_db = $registro['chave'];
}
while($registro2 = mysql_fetch_array($select_chave_atual)){
$chave_atual_db = $registro2['chave_atual'];
}
if($chave_db != $chave_atual_db){
echo"
<META HTTP-EQUIV=REFRESH CONTENT='0; URL=pga_login.php'>
<script type=\"text/javascript\">
alert(\"Licença de uso inválida. Favor atualizar.\");
</script>>";
}
comentários (0)
suspender
Lista de Respostas:
19/04/2010 3:30pm
(~14 anos atrás)
(~14 anos atrás)
Cara, ficou confuso. Não entendi nada da sua explicação.
Olhando seu código fica a impressão que vc não percebeu que a primeira consulta trará todos os registros do banco que atendam a condição da data e irá pegar somente a última da lista.
O mesmo acontecerá com a consulta "SELECT * FROM tb_cliente WHERE id == '1'".
O que vc precisa é tentar trazer tudo em um único SQL, utilizando alguma informação de ligação.
Olhando seu código fica a impressão que vc não percebeu que a primeira consulta trará todos os registros do banco que atendam a condição da data e irá pegar somente a última da lista.
O mesmo acontecerá com a consulta "SELECT * FROM tb_cliente WHERE id == '1'".
O que vc precisa é tentar trazer tudo em um único SQL, utilizando alguma informação de ligação.
19/04/2010 9:37pm
(~14 anos atrás)
(~14 anos atrás)
Valeu a atenção, Marcos,
Na verdade não trará todos os registros do banco que atendam a condição de data, porque só existirá um registro por mês, entendeu??? Com isso, não terá mais de uma linha selecionada.
Vou tentar explicar novamente. É o seguinte, estou tentando criar um SQL de validação, como se fosse um licenciamento de uso mensal.
Por exemplo, o primeiro passo é conseguir a data de hoje. Com a data de hoje, procuro uma linha na tabela tb_licenca em que a data de hoje esteja dentro do período de data inicial e final da mesma tabela. Achando essa linha, obtenho o campo "chave". Este foi o primeiro SQL.
O segundo SQL, eu busco o campo "chave_atual" da tabela tb_cliente. Esta tabela só possuirá uma única linha sempre.
Com esses dois campos de chave em mãos, comparo um com o outro. Se forem diferentes, aparecerá a mensagem de "Licença inválida". Caso sejam iguais, terá um else informando o que fazer.
Desculpem se não fui claro. O SQL ainda tá um pouco confuso para mim... rsrs.
Na verdade não trará todos os registros do banco que atendam a condição de data, porque só existirá um registro por mês, entendeu??? Com isso, não terá mais de uma linha selecionada.
Vou tentar explicar novamente. É o seguinte, estou tentando criar um SQL de validação, como se fosse um licenciamento de uso mensal.
Por exemplo, o primeiro passo é conseguir a data de hoje. Com a data de hoje, procuro uma linha na tabela tb_licenca em que a data de hoje esteja dentro do período de data inicial e final da mesma tabela. Achando essa linha, obtenho o campo "chave". Este foi o primeiro SQL.
O segundo SQL, eu busco o campo "chave_atual" da tabela tb_cliente. Esta tabela só possuirá uma única linha sempre.
Com esses dois campos de chave em mãos, comparo um com o outro. Se forem diferentes, aparecerá a mensagem de "Licença inválida". Caso sejam iguais, terá um else informando o que fazer.
Desculpem se não fui claro. O SQL ainda tá um pouco confuso para mim... rsrs.
21/04/2010 12:06pm
(~14 anos atrás)
(~14 anos atrás)
É possível deixar a lógica em um único SQL.
Poste suas tabelas para que eu verifique como deveria ser o SQL.
Poste suas tabelas para que eu verifique como deveria ser o SQL.
21/04/2010 9:00pm
(~14 anos atrás)
(~14 anos atrás)
Fala Marcos,
Segue aí abaixo:
Tabela "tb_cliente"
id empresa chave_atual
------------------------------------
1 Empresa Ltda. 123456789
Tabela "tb_licenca"
id data_inicial data_final chave
------------------------------------------------
1 2010-04-01 2010-04-30 123456789
2 2010-05-01 2010-05-31 101010101
3 2010-06-01 2010-06-30 202020202
Acho que é isso que vc quer, né???
Segue aí abaixo:
Tabela "tb_cliente"
id empresa chave_atual
------------------------------------
1 Empresa Ltda. 123456789
Tabela "tb_licenca"
id data_inicial data_final chave
------------------------------------------------
1 2010-04-01 2010-04-30 123456789
2 2010-05-01 2010-05-31 101010101
3 2010-06-01 2010-06-30 202020202
Acho que é isso que vc quer, né???
22/04/2010 12:21am
(~14 anos atrás)
(~14 anos atrás)
Cara, como vc sabe qual licença é de tal empresa?
Uma licenca vale pra qualquer empresa?
A ligação é a chave da licença?
Uma licenca vale pra qualquer empresa?
A ligação é a chave da licença?
22/04/2010 10:56pm
(~14 anos atrás)
(~14 anos atrás)
Só terei uma empresa cadastrada na tabela "tb_cliente".
Na verdade, eu acho que terá que ser dois SQL. Porque não há ligação entre as tabelas. Tenho que extrair a chave de cada tabela e compará-las, se forem iguais sigo uma ação, e se forem diferentes sigo outra ação.
Na verdade, eu acho que terá que ser dois SQL. Porque não há ligação entre as tabelas. Tenho que extrair a chave de cada tabela e compará-las, se forem iguais sigo uma ação, e se forem diferentes sigo outra ação.
23/04/2010 3:01pm
(~14 anos atrás)
(~14 anos atrás)
O sistema está no começo? Se sim, porque não refaz a modelagem já prevendo utilizar mais de uma empresa?
Do jeito que está da pra fazer assim
Do jeito que está da pra fazer assim
$sql = 'SELECT count(*) as qt FROM tbl_cliente INNER JOIN tbl_licenca ON (tbl_cliente.chave_atual = tbl_licenca.chave) WHERE CURDATE() BETWEEN data_inicial AND data_final AND tbl_cliente.id = 1 GROUP BY tbl_cliente.id'; $res = mysql_query($sql) or trigger_error(mysql_error()); $dados = mysql_fetch_assoc($res) or trigger_error(mysql_error()); if($dados['qt']<1) echo" <META HTTP-EQUIV=REFRESH CONTENT='0; URL=pga_login.php'> <script type=\"text/javascript\"> alert(\"Licença de uso inválida. Favor atualizar.\"); </script>>";
24/04/2010 4:18pm
(~14 anos atrás)
(~14 anos atrás)
Marcos,
Criei um arquivo PHP com o SQL que enviou e dei um include desse arquivo na página de validação de login, porém mesmo com as chaves iguais nas tabelas está apresentando o alerta de "Licença de uso inválida".
Criei um arquivo PHP com o SQL que enviou e dei um include desse arquivo na página de validação de login, porém mesmo com as chaves iguais nas tabelas está apresentando o alerta de "Licença de uso inválida".