Ir para conteúdo

POWERED BY:

Arquivado

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

Jordan Pinheiro_147113

[Resolvido] Sql + php select pela data de inicio e termino

Recommended Posts

Olá pessoa, preciso de uma ajudinha...

 

Seguinte eu tenho um site de compras coletivas e estou tendo problemas na lógica do meu sql...

 

mysql_query("SELECT * FROM segura WHERE cidade='$cidade_id' AND inicio >= '$hoje' AND termino <= '$hoje'") or die (mysql_error());

 

acima veja meu sql mas não funciona... tipo eu preciso que el faça o select apenas do registro que tiver data inicial maior ou igual a de hoje e data final menor ou = de hoje... alguém pode me da uma ajudinha

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom mostra a estrutura do banco e qual a lógica?

 

 

maior que hoje e menor e igual a hoje.

 

 

tipo coloca um exemplo de registros que possui nessa tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

testa assim

 

SELECT * FROM `segura` WHERE `cidade`='$cidade_id' AND CURDATE() BETWEEN `inicio` AND `termino`

 

ou

 

SELECT * FROM `segura` WHERE `cidade`='$cidade_id' AND `inicio` <= CURDATE() AND `termino` <= CURDATE() 

 

edit: mudança na query de NOW() para CURDATE()

Compartilhar este post


Link para o post
Compartilhar em outros sites

id ativo rotativo cidade promocao inicio termino

166 1 1 1 8 2011-07-11 19:42:07 2011-07-29 19:42:09

165 1 1 1 7 2011-07-11 00:00:00 2011-07-12 00:00:00

 

a tabela é essa acima eu preciso q a promoção entre e saia do ar de acordo com a data de inicio e de termino

 

lembrando q meu termino esta em datetime e não date

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro esta na lógica do sql invertida.

 

mysql_query("SELECT * FROM segura WHERE cidade='$cidade_id' AND inicio >= '$hoje' AND termino <= '$hoje'") or die (mysql_error());

 

onde deveria ser respectivamente <= e >=

 

ou mudar a ordem dos campos tipo o hoje>=inicio and hoje <= termino

 

 

essa sua esta assim

 

SELECT * FROM segura WHERE cidade='$cidade_id' AND inicio >= '$hoje' AND termino <= '$hoje';

 

inicio> 2011-07-12 14:47:48 and termino <=2011-07-12 14:47:48

e como se estivesse buscando futuro.

 

 

bom espero ter sido claro.

inicio depois de hoje e o termino anttes de hoje

Compartilhar este post


Link para o post
Compartilhar em outros sites

testei com essa estrutura

CREATE TABLE IF NOT EXISTS `segura` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `ativo` int(11) NOT NULL,
 `rotativo` int(11) NOT NULL,
 `cidade` int(11) NOT NULL,
 `promocao` int(11) NOT NULL,
 `inicio` datetime NOT NULL,
 `termino` datetime NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Extraindo dados da tabela `segura`
--

INSERT INTO `segura` (`id`, `ativo`, `rotativo`, `cidade`, `promocao`, `inicio`, `termino`) VALUES
(1, 1, 1, 1, 8, '2011-07-11 19:42:07', '2011-07-29 19:42:09'),
(2, 1, 1, 1, 7, '2011-07-11 00:00:00', '2011-07-12 00:00:00');

 

 

sql testado

 

SELECT * 
FROM segura
WHERE cidade =1
AND inicio <= NOW( ) 
AND termino >= NOW( ) 

 

mas se assim não funciona tenta assim

 

SELECT * 
FROM  `segura` 
WHERE cidade =1
AND NOW( ) 
BETWEEN inicio
AND termino

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi, não era esse resultado que você deseja:

C:\dev\mysql\bin>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.41 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create schema shop;
Query OK, 1 row affected (0.00 sec)

mysql> use shop;
Database changed
mysql> CREATE TABLE IF NOT EXISTS `segura` (
   ->   `id` int(11) NOT NULL AUTO_INCREMENT,
   ->   `ativo` int(11) NOT NULL,
   ->   `rotativo` int(11) NOT NULL,
   ->   `cidade` int(11) NOT NULL,
   ->   `promocao` int(11) NOT NULL,
   ->   `inicio` datetime NOT NULL,
   ->   `termino` datetime NOT NULL,
   ->   PRIMARY KEY (`id`)
   -> ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;
Query OK, 0 rows affected (0.08 sec)

mysql> INSERT INTO `segura` (`id`, `ativo`, `rotativo`, `cidade`, `promocao`, `inicio`, `termino`) VALUES
   -> (1, 1, 1, 1, 8, '2011-07-11 19:42:07', '2011-07-29 19:42:09'),
   -> (2, 1, 1, 1, 7, '2011-07-11 00:00:00', '2011-07-12 00:00:00');
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from segura where cidade = 1 and inicio <= now() or termino >= now();
+----+-------+----------+--------+----------+---------------------+---------------------+
| id | ativo | rotativo | cidade | promocao | inicio              | termino             |
+----+-------+----------+--------+----------+---------------------+---------------------+
|  1 |     1 |        1 |      1 |        8 | 2011-07-11 19:42:07 | 2011-07-29 19:42:09 |
|  2 |     1 |        1 |      1 |        7 | 2011-07-11 00:00:00 | 2011-07-12 00:00:00 |
+----+-------+----------+--------+----------+---------------------+---------------------+
2 rows in set (0.00 sec)

mysql> select * from segura where cidade = 1 and inicio <= now() and termino >= now();
+----+-------+----------+--------+----------+---------------------+---------------------+
| id | ativo | rotativo | cidade | promocao | inicio              | termino             |
+----+-------+----------+--------+----------+---------------------+---------------------+
|  1 |     1 |        1 |      1 |        8 | 2011-07-11 19:42:07 | 2011-07-29 19:42:09 |
+----+-------+----------+--------+----------+---------------------+---------------------+
1 row in set (0.00 sec)

mysql>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o cod está assim.

<?php
$sql_segura_lado = mysql_query("SELECT * FROM segura WHERE cidade='$cidade_id' AND NOT promocao = '$chave_se' AND inicio <= NOW( ) AND termino >= NOW( ) ORDER by id DESC LIMIT 4") or die (mysql_error());
while($pegar_segura_lado = mysql_fetch_object($sql_segura_lado)) {
$pegar_promo_lado  = mysql_query("SELECT * FROM promocao WHERE id='".$pegar_segura_lado->promocao."'");
$ver_promo_lado = mysql_fetch_object($pegar_promo_lado);
?>
<div class="promo_lateral_1"><a href="<?php echo h_url().$cidade.'/desconto-do-dia/'.$ver_promo_lado->id; ?>">
<div><img src="<?php base_url(); ?>img/campanhas/<?php echo $ver_promo_lado->foto1; ?>" alt="" name="Veja mais uma" width="192" height="121" border="0"></div>
 <div class="texto-03"><?php echo $ver_promo_lado->titulo2; ?></div>
 </a>
</div>
<?php } ?>

 

isso funfou belezura só q ele só traz um resultado e eu preciso listar todos que peguem essa regra

Compartilhar este post


Link para o post
Compartilhar em outros sites

me manda sua base de dados, o que você deseja fazer , que eu faço com certeza esta mais fácil do que entender aqui o que você quer.

explica o que e segura e promoções porque pela minha impressão esse seu while esta invertido.

 

tipo pra mim deveria trazer as promoções e depois os seguros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ficou assim rodou beleza

 

$sql = mysql_query("SELECT pro.id, pro.titulo1 FROM promocao pro INNER JOIN segura seg ON pro.id = seg.promocao WHERE NOW( ) between inicio AND termino");

 

agradecer a ajuda de todos vocês ficou como eu queria... vlw a todos

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.