Поиск по диапазону дат и по ключевому слову

Для создания отчета в своем проекте я хочу использовать 2 метода:

  1. По диапазону дат (от даты и до даты)
  2. По идентификатору сотрудника

При использовании вышеуказанных ключевых слов полная запись сотрудника должна отображаться в этом конкретном диапазоне.

Например, 1234 - это сотрудник, чья запись должна быть проверена в период с 20 мая 2018 г. по 30 июня 2018 г. Результат должен отображаться в диапазоне

Другое дело, что поиск может выполняться либо по дате, либо по идентификатору сотрудника, либо по обоим параметрам, но и то, и другое не должно быть обязательным.

сценарий выглядит следующим образом:

<script>  
      $(document).ready(function(){  
           $.datepicker.setDefaults({  
                dateFormat: 'yy-mm-dd'   
           });  
           $(function(){  
                $("#from_date").datepicker();  
                $("#to_date").datepicker();  
           });  
           $('#filter').click(function(){  
                var from_date = $('#from_date').val();  
                var to_date = $('#to_date').val();  
                if (from_date != '' && to_date != '')  
                {  
                     $.ajax({  
                          url:"filter.php",  
                          method:"POST",  
                          data:{from_date:from_date, to_date:to_date},  
                          success:function(data)  
                          {  
                               $('#report_table').html(data);  
                          }  
                     });  
                }  
                else  
                {  
                     alert("Please Select Date");  
                }  
           });  
      });  
 </script>

<script>
$(document).ready(function(){

 load_data();

 function load_data(query)
 {
  $.ajax({
   url:"fetch.php",
   method:"POST",
   data:{query:query},
   success:function(data)
   {
    $('#report_table').html(data);
   }
  });
 }
 $('#search_text').keyup(function(){
  var search = $(this).val();
  if (search != '')
  {
   load_data(search);
  }
  else
  {
   load_data();
  }
 });
});
</script>

Мне нужно объединить эти два разных запроса в один.

filter.php

<?php  
 //filter.php  
 if (isset($_POST["from_date"], $_POST["to_date"]))  
 {  
      $connect = mysqli_connect("localhost", "root", "", "ais");  
      $output = '';  
      $query = "  
           SELECT * FROM tbl_employees,tbl_in_time_attendance,tbl_out_time_attendance  WHERE tbl_employees.EmpId=tbl_in_time_attendance.EmpId AND tbl_in_time_attendance.EmpId=tbl_out_time_attendance.EmpId AND tbl_in_time_attendance.date=tbl_out_time_attendance.date AND tbl_in_time_attendance.date AND tbl_out_time_attendance.date  BETWEEN '".$_POST["from_date"]."' AND '".$_POST["to_date"]."'  
      ";  
      $result = mysqli_query($connect, $query); 
      $cnt=1;     
      $output .= '  
           <table class = "table table-bordered">  
                <tr>  
                     <th width = "6%">Sr No.</th>  
                     <th width = "15%">EMPLOYEE ID</th> 
                     <th width = "20%">EMPLOYEE NAME</th>
                     <th width = "15%">IN_TIME</th>  
                     <th width = "15%">OUT_TIME</th>  
                     <th width = "15%">DATE</th> 
                     <th width = "25%">WORKING HOURS</th> 
                </tr>  
      ';  
      if (mysqli_num_rows($result) > 0)  
      {  
           while($row = mysqli_fetch_array($result))  
           {  
                        $outtime = $row["outtime"];
                        $intime = $row["intime"];
                        $array1 = explode(':', $intime);
                        $array2 = explode(':', $outtime);

                        $minutes1 = ($array1[0] * 60.0 + $array1[1])/60;
                        $minutes2 = ($array2[0] * 60.0 + $array2[1])/60;

                        $diff = round(($minutes2 - $minutes1),1).' hrs';


                $output .= '  
                     <tr>  
                          <td align = "center">'. $cnt .'</td>  
                          <td align = "center">'. $row["EmpId"] .'</td>  
                          <td align = "center">'. $row["FirstName"] . " " . $row["LastName"].'</td> 
                          <td align = "center">'. $row["intime"] .'</td>  
                          <td align = "center"> '. $row["outtime"] .'</td>  
                          <td align = "center">'. $row["date"] .'</td> ';
        if ($diff < 8) {
        $output .= '<td align = "center" style = "background-color: #F42E2E;"> ' . $diff . ' </td>';
} else {
    $output .= '<td align = "center" style = "background-color: #55E443;"> ' . $diff . ' </td>';
}
$output .= '</tr>';

          $cnt++;
           } 

      }  
      else  
      {  
           $output .= '  
                <tr>  
                     <td colspan = "5">No Record Found</td>  
                </tr>  
           ';  
      }  
      $output .= '</table>';  
      echo $output;  
 }  


 ?>

Fetch.php

<?php

$connect = mysqli_connect("localhost", "root", "", "ais");
$output = '';
if (isset($_POST["query"]))
{

 $query = "
          SELECT * FROM tbl_employees,tbl_in_time_attendance,tbl_out_time_attendance  WHERE tbl_employees.EmpId=tbl_in_time_attendance.EmpId AND tbl_in_time_attendance.EmpId=tbl_out_time_attendance.EmpId AND tbl_in_time_attendance.date=tbl_out_time_attendance.date AND tbl_in_time_attendance.date AND tbl_employees.EmpId LIKE '".$_POST["query"]."' ";
}
else
{
 $query = "SELECT * from tbl_employees, tbl_in_time_attendance , tbl_out_time_attendance WHERE tbl_employees.EmpId=tbl_in_time_attendance.EmpId AND tbl_in_time_attendance.EmpId=tbl_out_time_attendance.EmpId AND tbl_in_time_attendance.date=tbl_out_time_attendance.date";  

}
$result = mysqli_query($connect, $query);
if (mysqli_num_rows($result) > 0)
{
 $cnt=1;

 $output .= '

   <table class = "table table-bordered">  
                <tr>  
                     <th width = "6%">Sr No.</th>  
                     <th width = "15%">EMPLOYEE ID</th> 
                     <th width = "20%">EMPLOYEE NAME</th>
                     <th width = "15%">IN_TIME</th>  
                     <th width = "15%">OUT_TIME</th>  
                     <th width = "15%">DATE</th> 
                     <th width = "25%">WORKING HOURS</th> 
                </tr>  
 ';
 while($row = mysqli_fetch_array($result))
 {
  $outtime = $row["outtime"];
                        $intime = $row["intime"];
                        $array1 = explode(':', $intime);
                        $array2 = explode(':', $outtime);

                        $minutes1 = ($array1[0] * 60.0 + $array1[1])/60;
                        $minutes2 = ($array2[0] * 60.0 + $array2[1])/60;

                        $diff = round(($minutes2 - $minutes1),1).' hrs';


                $output .= '  
                     <tr>  
                          <td align = "center">'. $cnt .'</td>  
                          <td align = "center">'. $row["EmpId"] .'</td>  
                          <td align = "center">'. $row["FirstName"] . " " . $row["LastName"].'</td> 
                          <td align = "center">'. $row["intime"] .'</td>  
                          <td align = "center"> '. $row["outtime"] .'</td>  
                          <td align = "center">'. $row["date"] .'</td> ';
        if ($diff < 8) {
        $output .= '<td align = "center" style = "background-color: #F42E2E;"> ' . $diff . ' </td>';
} else {
    $output .= '<td align = "center" style = "background-color: #55E443;"> ' . $diff . ' </td>';
}
$output .= '</tr>';

          $cnt++;
 }
 }
 else  
      {  
           $output .= '  
                <tr>  
                     <td colspan = "5">No Record Found</td>  
                </tr>  
           ';  
      }  
      $output .= '</table>';  
      echo $output;  




?>

Я хочу, чтобы они разделяли файлы выборки и фильтрации в один файл. Пожалуйста помоги.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
67
1

Ответы 1

пожалуйста, не удаляйте вопрос снова, я писал несколько минут, а затем вопрос был удален, ха-ха

ну, так как у вас есть кнопка фильтра, которую нужно нажать, чтобы получить результаты, вы можете выбрать два способа!

  1. вы отображаете свою таблицу с помощью подключаемого модуля datatable, что означает, что вам нужно только отфильтровать по дате, а затем ввести идентификатор сотрудника в поле поиска, и вы увидите только результаты для этого человека БЕЗ необходимости запрашивать его снова! https://datatables.net/

  2. вы получите две даты И ваш поисковый запрос, нажав кнопку фильтра, что означает, что у вас будет только один файл php (я не знаю, почему вы действительно хотите использовать выборку и фильтр). Затем в своем файле php вы посмотрите, есть ли отправляются только даты ИЛИ запрос также отправляется:

    $('#filter').click(function(){  
       var from_date = $('#from_date').val();  
       var to_date = $('#to_date').val();  
       var query = $("#search_text").val();
    
       if (from_date != '' && to_date != '')  
       {  
         $.ajax({  
              url:"filter.php",  
              method:"POST",  
              data:{from_date:from_date, to_date:to_date, employee: query},  
              success:function(data)  
              {  
                   $('#report_table').html(data);  
              }  
         });  
       }  
       else  
       {  
         alert("Please Select Date");  
       }  
    });  
    

в файле php

if (isset($_POST["employee"]) AND $_POST["employee"] != "") {
    // make your sql call with dates AND employeeid
} else {
    // make your sql call only with dates
}

в зависимости от того, сколько результатов у вас есть, я уверен, что также возможно даже не запрашивать снова для разных дат и вместо этого настроить datatable так, чтобы у вас было одно поле from_date, одно to_date и одно поле поиска и отфильтровать таблицу после нажатия клавиши .. см. пример здесь: https://datatables.net/examples/api/multi_filter.html

если возможно, не могли бы вы предоставить код для этого

Atul Aman 20.07.2018 11:28

Я не могу, поскольку вы не говорите мне настоящую проблему .. что не работает? у вас есть ошибки?

Christopher Supertramp 20.07.2018 11:29

Я изменил свой код, как вы сказали. Фильтр диапазона дат работает, но поисковый запрос по-прежнему ничего не ищет

Atul Aman 20.07.2018 11:38

ах, извините, я думаю, это потому, что у меня было "#searchtext" вместо "#search_text" ... попробуйте, изменив эту строку!

Christopher Supertramp 20.07.2018 11:43

также обратите внимание, что моя переменная post будет сотрудником, а ваша - запросом, вы можете изменить это на то, что вам больше нравится.

Christopher Supertramp 20.07.2018 11:44

Я изменил его несколько секунд назад, но если вы скопировали мой код, то у вас будет старый идентификатор .. вы его изменили?

Christopher Supertramp 20.07.2018 11:46

хм, тогда попробуйте сначала в jquery для предупреждения (запроса); чтобы увидеть, работает ли это, и в вашем php файле (я думаю, вы выбираете $ output) поместите строку внутри раздела search_text, где вы просто скажете $ output = "test", и посмотрите, попадает ли он в правильный раздел ... вы также можете откройте веб-инспектор и посмотрите, отправляется ли запрос

Christopher Supertramp 20.07.2018 11:49

предоставьте код или ссылки, которые имеют функцию обоих запросов sql

Atul Aman 20.07.2018 11:53

Я пробовал простую логику данных только для поиска моих данных в базе данных, но это не сработало

Atul Aman 20.07.2018 11:55

проверьте эту ссылку: webslesson.info/2017/06/… Я пытался запустить код, но он дает ошибку json

Atul Aman 20.07.2018 11:57

если вы раньше работали с запросами, вам просто нужно немного изменить их, чтобы результаты поиска выполнялись с from_date, to_date И employee | а другой только для from_date и to_date ..

Christopher Supertramp 20.07.2018 11:58

вы сейчас используете таблицы данных или нет?

Christopher Supertramp 20.07.2018 11:59

если вы используете таблицы данных, вы должны прочитать документацию о том, как заполнить таблицу ... вам нужно будет получать данные через json, а не нормально выводиться, но, пожалуйста, сначала прочитайте, как это сделать.

Christopher Supertramp 20.07.2018 12:00

Я использовал таблицы данных для простого поиска, но это не сработало

Atul Aman 20.07.2018 12:01

вот почему я сказал, прочтите документацию ... таблицы данных отличаются от вывода вашей обычной таблицы в поле таблицы, но я не здесь, чтобы писать полный код ... просто изучите его сейчас, и вы также сможете использовать его для своих следующих проектов .. перепишите свой код для таблиц данных, если вы хотите его использовать, и если у вас есть вопросы, опубликуйте свой новый код как вопрос и расскажите о своих проблемах .. мой пример НЕ для таблиц данных, поэтому я написал 1. таблицы данных, 2. обычный поиск

Christopher Supertramp 20.07.2018 12:03

Другие вопросы по теме