Estou com um problema para fazer uma consulta num BD.
Possuo um BD com o nome diárias_tb. Cada registro gravado nela possui dois campos de data, são eles: datainicial_data (com a data inicial da ‘validade’ da diária) e datafinal_diaria (com a data final da ‘validade’ da diária). Eu preciso filtrar os resultados de acordo com estes dois campos.
Atualmente meu banco está alimentado com os seguintes registros:
Tentei também usando between Porém acontece o mesmo problema. Ele só me retorna o valor dentro do mês se a data inicial informada for igual a data inicial cadastrada no sistema. Vejam minha Query:
SELECT *
FROM diarias_tb
WHERE datainicial_diaria BETWEEN '2013-10-02' AND '2013-10-05';
O que o MySQL Retorna:
MySQL retornou um conjunto vazio (ex. zero registros). ( Consulta levou 0.0014 segundos )
Estou com um problema para fazer uma consulta num BD.
Possuo um BD com o nome diárias_tb. Cada registro gravado nela possui dois campos de data, são eles: datainicial_data (com a data inicial da ‘validade’ da diária) e datafinal_diaria (com a data final da ‘validade’ da diária). Eu preciso filtrar os resultados de acordo com estes dois campos.
Atualmente meu banco está alimentado com os seguintes registros:
SELECT *
FROM diarias_tb
WHERE id_hotel= '6'
AND datainicial_diaria >= '2013-09-26 '
AND datafinal_diaria <= '2013-09-28'
Não me retorna nada. Pelos dados passados, não deveria me trazer as informações referente a o mês Setembro?
Obrigado![/quote]
Não deveria retornar nada mesmo. Você não tem nenhum registro cuja data inicial seja maior do que 26 de setembro e a data final menor do que 28 de setembro. Para trazer esses registros referentes ao mês você deveria usar o primeiro e o último dia do mês na consulta.
Estou com um problema para fazer uma consulta num BD.
Possuo um BD com o nome diárias_tb. Cada registro gravado nela possui dois campos de data, são eles: datainicial_data (com a data inicial da ‘validade’ da diária) e datafinal_diaria (com a data final da ‘validade’ da diária). Eu preciso filtrar os resultados de acordo com estes dois campos.
Atualmente meu banco está alimentado com os seguintes registros:
SELECT *
FROM diarias_tb
WHERE id_hotel= '6'
AND datainicial_diaria >= '2013-09-26 '
AND datafinal_diaria <= '2013-09-28'
Não me retorna nada. Pelos dados passados, não deveria me trazer as informações referente a o mês Setembro?
Obrigado![/quote]
Não deveria retornar nada mesmo. Você não tem nenhum registro cuja data inicial seja maior do que 26 de setembro e a data final menor do que 28 de setembro. Para trazer esses registros referentes ao mês você deveria usar o primeiro e o último dia do mês na consulta.[/quote]
Exatamente, o erro ai foi na hora de popular sua tabela rs
Vocês poderiam me dar alguma luz de como eu poderia fazer isso funcionar? Isso faz parte de um sistema de cotação de diárias para hotéis. São duas áreas, uma administrativa, para realizar o cadastro dos hotéis e suas diárias (os preços das diárias tem data especifica, dai o ‘datainicial_diaria’ e ‘datafinal_diaria’) E a área publica, onde há um formulário com select.
O cliente informa a data que deseja ficar no hotel, e o sistema buscara diárias dentro da data informada.
Deu pra entender pessoal? Obrigado a todos que responderam até aqui
SELECT *
FROM diarias_tb
WHERE id_hotel = '6'
AND datainicial_diaria <= '2013-10-08 '
AND datafinal_diaria >= '2013-09-26'
SELECT *
FROM diarias_tb
WHERE id_hotel = '6'
AND datainicial_diaria <= '2013-10-31'
AND datafinal_diaria >= '2013-09-01'
Qualquer uma das queries anteriores me devolveu as linhas de Setembro e Outubro. Não vejo qualquer problema.
Pessoal, acho que encontrei por hora uma solução para o meu problema! \o/
Fuçando em um fórum de Portugal me deparei com essa query:
SELECT
*
FROM
diarias_tb
WHERE
id_hotel='6'
AND
-- Esta primeira parte apanha todas as actividades que tenham o fim ou o inicio no teu
-- intervalo
((datainicial_diaria between '2013-10-02' and '2014-01-04')
OR (datafinal_diaria between '2013-10-02' and '2014-01-04')
-- Esta segunda parte serve para apanhar as actividades que começam e acabam
-- fora do teu intervalo, mas que o intersectam
OR ('2013-10-02' between datainicial_diaria and datafinal_diaria)
OR ('2014-01-04' between datainicial_diaria and datafinal_diaria))
E funcionou como o esperado! Esta query consegue buscar tanto dentro de um mês quando em mais de um mês!
Agora estou aqui pensando como vou trabalhar com o PHP para separar as datas para realizar a soma caso aconteça de haver mais uma diária durante o período selecionado. Se alguém tiver alguma dica para me dar, agradeço mais ainda