Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Группировка по дате в таблице (https://javascript.ru/forum/misc/69329-gruppirovka-po-date-v-tablice.html)

localghost1515 15.06.2017 08:21

Группировка по дате в таблице
 
Здравствуйте дорогие друзья, на javascript разбираюсь не очень (только умею подключать сторонние библиотеки) прошу строго не судить. И так есть таблица (вообще у меня Datatables, но можно использовать и обычную таблицу если это решит данный вопрос) в таблице идет дата, потом ФИО пациента и потом адрес и т д. При выборке из mysql он естественно выводит всё что есть подряд. И получается так например за один день если врач принял 3 пациента он эту дату выводит три раза. А хотелось бы как то сгруппировать даты чтоб он дату показывал один раз а фамилии три. Привожу пример в картинках Сейчас выглядит так

Хотелось бы так
Возможно ли это ? или есть ещё варианты у кого какие ? идеи ? ЧТобы как то отдельным образом показать даты чтоб бухгалтер не считал каждый раз по дням...) Спасибо всем

laimas 15.06.2017 14:32

0000-00-00 - врач из будущего или прошлого? )
Если учет ведется, то это поле должно быть обязательным к заполнению.

В общем-то, что вы спрашиваете, это не группировка, вы хотите просто удалить содержание из ячеек таблицы. Да можно, как можно было бы и разобрать запрос на стороне сервере, поместив данные под ключами дат.

рони 15.06.2017 16:58

localghost1515,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
   <style type="text/css">
   <!--

   -->
   </style>
  <script>

 window.addEventListener("DOMContentLoaded", function() {
    var a = document.querySelectorAll("tr td:first-child"), obj = {};
    [].forEach.call(a, function(b) {
        var t = b.textContent;
        obj[t] ? (b.textContent="") : (obj[t]=true)
    })
});
  </script>
</head>

<body>
 <table>
 	<tbody>
<tr><td>Запись 1></td><td>1000</td></tr>
<tr><td>Запись 1></td><td>1111</td></tr>
<tr><td>Запись 1></td><td>2134</td></tr>
<tr><td>Запись 4></td><td>2232</td></tr>
<tr><td>Запись 5></td><td>1223</td></tr>
<tr><td>Запись 5></td><td>1000</td></tr>

 	</tbody>
 </table>

</body>
</html>

laimas 15.06.2017 17:24

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

<html>
<head>
</head>
<body>
<table border="1">
    <tr>
        <td rowspan="3">1</td>
        <td>a</td>
    </tr>
        <tr><td>b</td>
    </tr>
    <tr>
        <td>c</td>
    </tr>
    <tr>
        <td rowspan="2">2</td>
        <td>d</td>
    </tr>
    <tr>
        <td>e</td>
    </tr>
</table>
</body>
</html>

localghost1515 16.06.2017 14:55

Цитата:

Сообщение от laimas (Сообщение 455539)
0000-00-00 - врач из будущего или прошлого? )
Если учет ведется, то это поле должно быть обязательным к заполнению.

Врач из настоящего ) Правильно говорите поля надо сделать обязательными. Спасибо совсем забыл ( исправлю

localghost1515 16.06.2017 14:58

Цитата:

Сообщение от laimas (Сообщение 455561)
рони,
по уму, автору нужно иметь данные, где первичным ключом будут даты, тогда количество элементов у ключа будет определять структуру таблицы. То есть ее построение не вызовет затруднений.

Спасибо ! Попробую что то сделать именно в этом направлении. Насколько я понял тут JS и не нужен ? или я не правильно понял ?

laimas 16.06.2017 15:17

Цитата:

Сообщение от localghost1515
Насколько я понял тут JS и не нужен ?

Все зависит от того, какая сторона формирует эту таблицу. Если это сервер, то конечно нет. При этом не обязательно готовить и предварительный массив с ключами дат и вложениями. Если запросом можно возвратить все строки сразу (fetchAll), то array_count_values(array_colum($result, 'date')) - это будет информация для rowspan, и даже какие срезы массива данных ФИО нужно брать, чтобы проще сделать вывод.

Вот только при таком выводе таблицы "Показать по" должен оперировать не строками записей, а быть завязанным на количество дат в отображении, иначе часть данных дат может отображаться с переносами на другую страницу. Хотя в общем-то решать вам.


Часовой пояс GMT +3, время: 08:01.