2017-02-22 33 views
0

Привет. Я хочу интегрировать выпадающий выбор/параметр на странице, хранящей группу интервалов дат, которые будут фильтровать запрос mysql по соответствующей выбранной опции. Не уверен, что это дубликат, но не нашел ничего подобного.Запрос на получение запроса Mysql и фильтрация на основе определенных интервалов дат

Таблица, в которой я получаю «созданную дату», имеет столбец временной метки.

Должно ли это быть запросом Mysql или обрабатываться с помощью javascript? Каким будет оптимальное решение?

Пример:

<h3>Posts Filter</h3> 
 
<select> 
 
    <option>All Time</option> 
 
    <option>Past Day</option> 
 
    <option>Past Week</option> 
 
    <option>Past Month</option> 
 
    <option>Past Year</option> 
 
</select> 
 

 
<br> 
 
<br> 
 
<hr> 
 

 
<div style="width:45%;height:200px;float:left;border:1px solid #ddd;padding:10px;margin:2.5%;box-sizing:border-box;"> 
 
    <h2>Post Header</h2> 
 
    <em>Created On: February 21 2017</em> 
 
    <p>Bacon ipsum dolor amet short ribs kevin ribeye meatball filet mignon swine pork loin spare ribs, pork belly cow tenderloin venison...</p> 
 
</div> 
 

 
<div style="width:45%;height:200px;float:left;border:1px solid #ddd;padding:10px;margin:2.5%;box-sizing:border-box;"> 
 
    <h2>Post Header</h2> 
 
    <em>Created On: February 18 2017</em> 
 
    <p>Bacon ipsum dolor amet short ribs kevin ribeye meatball filet mignon swine pork loin spare ribs, pork belly cow tenderloin venison...</p> 
 
</div> 
 

 
<div style="width:45%;height:200px;float:left;border:1px solid #ddd;padding:10px;margin:2.5%;box-sizing:border-box;"> 
 
    <h2>Post Header</h2> 
 
    <em>Created On: January 26 2016</em> 
 
    <p>Bacon ipsum dolor amet short ribs kevin ribeye meatball filet mignon swine pork loin spare ribs, pork belly cow tenderloin venison...</p> 
 
</div> 
 

 
<div style="width:45%;height:200px;float:left;border:1px solid #ddd;padding:10px;margin:2.5%;box-sizing:border-box;"> 
 
    <h2>Post Header</h2> 
 
    <em>Created On: March 15 2016</em> 
 
    <p>Bacon ipsum dolor amet short ribs kevin ribeye meatball filet mignon swine pork loin spare ribs, pork belly cow tenderloin venison...</p> 
 
</div>

Спасибо за любой вклад!

Serge

ответ

0

Да гм обрабатывать с помощью AJAX ...

<select id="select"> 
    <option value="all">All Time</option> 
    <option value="day">Past Day</option> 
    <option value="weel">Past Week</option> 
    <option value="month">Past Month</option> 
    <option value="year">Past Year</option> 
</select> 



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

$("#select").change(function() { 


    $.ajax({ 
       type: 'post', 
       url: "getSql", 
       data: { $(this).val() }, 
       success: function($response) { 
         response = $.parseJSON(reponse); 
         $.each(response, function(k, v) { 
          // key and value 
          $("YOUDIV").append(VALUE) 
         }); 



       } 
      }); 

}) 


}) 

</script> 
+0

Спасибо Рафаэлю. Поскольку все «сообщения/контент» уже вытаскиваются из базы данных и отображаются на странице, нужно ли сделать другой запрос в db? И как я могу использовать временную метку для сообщений, чтобы отфильтровать сообщения только на показы в интервале дат, выбранном зрителем? – Sergio

+0

Да, ajax вы делаете запрос каждый раз, когда вы меняете или выбираете и заполняете свой html, но не перезагружаете страницу –

1

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

  1. Реализация его в JavaScript означает, что вы будете получать всю таблицу MySQL на одном дыхании, а также выполнять фильтрацию в браузере.

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

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

    • объем данных, который необходимо для отправки по проводам будет потенциально большой

    • Объем данных, который должен храниться в памяти браузером, потенциально будет большим, поэтому передача данных будет медленнее

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

  2. Реализация его в запросе MySQL большой объем данных означает, что вы будете получать только ту часть таблицы который соответствует вашим условиям и не должен будет выполнять фильтрацию в браузере.

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

    • Вы потенциально нужны несколько круглых поездок в базу данных

    • объем данных, который должен быть отправленный по проводу будет меньше, поэтому передача данных будет более быстрой.

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

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

Как можно понять из приведенных выше списков, размер таблицы играет решающий фактор. Если таблица небольшая, я бы выбрал подход JavaScript. Если таблица большая (или потенциально увеличится), я бы выбрал подход запроса.

+0

Robby, может быть, я немного подпрыгнул. Все записи будут отображаться на странице, но чтобы облегчить просмотр страницы, я хотел бы внедрить систему фильтрации. Поэтому, несмотря на это, я все еще делаю поездку в db для извлечения всех записей, просто нужно, чтобы зритель мог фильтровать контент, отображаемый на странице. Из того, что я читал с вашего поста, тогда нет необходимости делать еще одну (или несколько) дополнительные поездки в db. – Sergio

+0

@ Серхио Это правильно. Идите с помощью JavaScript-решения в этом случае. –

+0

Спасибо, Робби. Как я могу использовать timestamp в db для вывода в div преобразования фактической отметки времени (т.е.: 2017-02-18 03:21:10) в число, представляющее дни назад (т. Е. 4 дня назад)? Есть ли такой расчет, который может быть выполнен в запросе? – Sergio