Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Prezados,
Sou iniciante em programação web, e para estudar desenvolvi um sistema de Ordem de Serviço e tenho uma tela de consulta onde preciso filtrar por data. Além de fornecer a Data Inicial e Final (Dt_Inicio e Dt_Fim, o usuário possui mais dois filtros, um para a AREA (SeelctArea) e outro para a SITUAÇÃO (SelectSituacao) da Ordem de Serviço. O problema é que a consulta só retorna valores se o usuário utilizar todos os filtros, e eu gostaria que o usuário pudesse consultar também individualmente por filtro. Por exemplo, só por data ou por área ou situação. E que concatenasse a combinação de filtros, consultar, por exemplo, a AREA por DATA. A minha query está assim montada:
As Variáveis
If (isset($_POST['BtnBusca'])){
$Dt_Inicio = ($_POST['Dt_Inicio']);
$Dt_Fim = ($_POST['Dt_Fim']);
$Area = ($_POST['SelectArea']);
$Situacao = ($_POST['SelectSituacao']);
Minha Consulta
mysql_select_db($database_bd_os, $bd_os);
$query_BuscaOS = "SELECT * FROM TBL_GERAL WHERE DT_CADASTRO BETWEEN '$Dt_Inicio' AND '$Dt_Fim' AND AREA like '$Area' AND SITUACAO_OS like '$Situacao' ORDER BY DT_CADASTRO DESC";
$BuscaOS = mysql_query($query_BuscaOS, $bd_os) or die(mysql_error());
$row_BuscaOS = mysql_fetch_assoc($BuscaOS);
$totalRows_BuscaOS = mysql_num_rows($BuscaOS);
Ficaria profundamente agradecido caso pudessem me ajudar com a consulta correta.
Spoiler
SpoilerPrimeiro vamos na lógica, sua SQL está assim:
SELECIONE tudo DE TBL_GERAL ONDE DT_CADASTRO BETWEEN '$Dt_Inicio' E '$Dt_Fim' E AREA like '$Area' E SITUACAO_OS like '$Situacao' ORDER BY DT_CADASTRO DESC
Resumindo, você quer selecionar com todos os campos, utilizando AND (E, data e hora (por exemplo)), você tem que executar assim: data ou hora (exemplo), isso se chama operadores de funções, achará tópicos aqui: https://www.w3schools.com/php/php_operators.asp
No seu caso, se utiliza a operação OU (or), ficando assim:
$query_BuscaOS = "SELECT * FROM tbl_geral WHERE dt_cadastro BETWEEN '".$Dt_Inicio."' AND '".$Dt_Fim."' OR (area = '".$Area."' OR situacao_os = '".$Situacao."') ORDER BY dt_cadastro DESC";
Sugiro ler os artigos neste site que passei sobre operações. Abraços!
Se a gente retornar a consulta correta, como você vai aprender?
Se você quer que o usuário consiga pesquisar por N filtros, basta você filtrar o que o usuário preencheu.