Помогите просуммировать по критерию. mysql php с выводом в html

207
01 апреля 2017, 01:40

Помогите просуммировать Очки команд.

После таблицы результатов. Отдельной таблицей с сортировкой по сумме:

  1. Команда-1 25очков
  2. Команда-2 19очков
  3. Команда-3 11очков

4 час ковыряния не дал результата.

<?php   
 $connect = mysqli_connect("localhost", "", "", ""); 
 $connect->query("SET CHARACTER SET utf8"); 
 $output = '';   
 $sql = "SELECT itemID,  userName, pointsEtap, (commentDate + INTERVAL 3 HOUR) AS commentDate FROM table ORDER BY itemID ASC"; 
 $result = mysqli_query($connect, $sql);    
 $output .= ' 
       <div class="table-responsive">   
           <table class="table table-bordered">   
                <tr>   
                    
                     <th width="10%">Этап</th>   
                     <th width="40%">Команда</th>   
                     <th width="40%">Время ответа</th> 
                     <th width="10%">Очки</th> 
					  
                </tr>';   
 if(mysqli_num_rows($result) > 0)   
 {   
      while($row = mysqli_fetch_array($result))   
      {   
           $output .= '   
                <tr>   
                     <td>'.$row["itemID"].'</td>   
                     <td>'.$row["userName"].'</td> 
					 <td>'.$row["commentDate"].'</td> 
					 <td>'.$row["pointsEtap"].'</td> 
 
                </tr>   
           ';   
      }   
      $output .= '   
           <tr>   
                 
 
 
 
           </tr>   
      ';   
 }   
 else   
 {   
      $output .= '<tr>   
 
                     </tr>';   
 }   
 $output .= '</table>   
      </div>';   
 echo $output;   
  
 ?>

Answer 1

Вот, набросал на коленке один из вариантов поворота таблицы:

// Инициируем строки таблицы
$rows = array(
  'itemID' => array('title' => 'Этап', 'data' => array()),
  'userName' => array('title' => 'Игрок', 'data' => array()),
  'commentDate' => array('title' => 'Время ответа', 'data' => array())
);
// Заполняем строки данными из выборки
while ($row = mysqli_fetch_array($result)) {
  foreach ($row as $name => $value) {
    if (isset($rows[$name]))
      $rows[$name]['data'][] = $value;
  }
}
// Выводим таблицу: первая ячейка в строке - title, последующие - data
$output = "<div><table>";
foreach ($rows as $row) {
  $output .= "<tr><td>{$row['title']}</td>";
  foreach ($row['data'] as $value) {
    $output .= "<td>{$value}</td>";
  }
  $output .= "</tr>";
}
$output .= "</table></div>";

Можно еще заменить для первой строки td на th, но с этим, я полагаю, Вы и сами справитесь :)

Да, по поводу +3 часа. Конечно, лучше всего корректировать время прямо в sql-запросе. Опять таки, как вариант, можно это делать и "по ходу пьесы". Пример:

function dateTimeToUnix($dt, $dH = 0) {
  list($date, $time) = explode(' ', $dt);
  list($yy, $mm, $dd) = explode('-', $date);
  if ($time) {
    list($h, $m, $s) = explode(':', $time);
  } else {
    $h = $m = $s = 0;
  }
  return mktime($h, $m, $s, $mm, $dd, $yy) + $dH * 3600;
}
$uTime = dateTimeToUnix('2017-03-31 05:55:32', 3);
echo date('Y-m-d H:i:s', $uTime);
// будет выведено 2017-03-31 08:55:32
Answer 2

прибавить время +3 часа

SELECT `SomeFields`
     , `DatetimeField` + INTERVAL 3 HOUR
     , `OtherFields`

выдает пустое поле

Вот тест непосредственно на консоли сервера:

mysql> CREATE TABLE test (itemID INT, userName VARCHAR(16), commentDate DATETIME);
Query OK, 0 rows affected (1.01 sec)
mysql> INSERT INTO test (itemID, userName, commentDate)
    -> SELECT 1, 'item1', '2017-01-01 01:01:01' UNION ALL
    -> SELECT 2, 'item2', '2017-02-02 02:02:02' ;
Query OK, 2 rows affected (0.23 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> SELECT itemID, userName, commentDate, commentDate + INTERVAL 3 HOUR commentDate3h
    -> FROM test
    -> ORDER BY itemID ASC ;
+--------+----------+---------------------+---------------------+
| itemID | userName | commentDate         | commentDate3h       |
+--------+----------+---------------------+---------------------+
|      1 | item1    | 2017-01-01 01:01:01 | 2017-01-01 04:01:01 |
|      2 | item2    | 2017-02-02 02:02:02 | 2017-02-02 05:02:02 |
+--------+----------+---------------------+---------------------+
2 rows in set (0.09 sec)

Проверьте свой запрос именно так. Если получите правильные данные (а с чего им быть неправильными) - ищите ошибку в другом месте.

Answer 3

Ничего не выдавет. Пусто. Куда вставит функцию +3 часа я и не понял.)

<?php   
 $connect = mysqli_connect("localhost", "", "", ""); 
 $connect->query("SET CHARACTER SET utf8"); 
 $sql = "SELECT * FROM table ORDER BY itemID ASC"; 
 $result = mysqli_query($connect, $sql);   
 
// Инициируем строки таблицы 
$rows = array( 
  'itemID' => array('title' => 'Этап', 'data' => array()), 
  'userName' => array('title' => 'Игрок', 'data' => array()), 
  'commentDate' => array('title' => 'Время ответа', 'data' => array()) 
); 
 
// Заполняем строки данными из выборки 
while ($row = mysqli_fetch_array($result)) { 
  foreach ($row as $name => $value) { 
    if (isset($rows[$name])) 
      $rows[$name]['data'][] = $value; 
  } 
} 
 
// Выводим таблицу: первая ячейка в строке - title, последующие - data 
$output = "<div><table>"; 
foreach ($rows as $row) { 
  $output .= "<tr><td>{$row['title']}</td>"; 
  foreach ($row['data'] as $value) { 
    $output .= "<td>{$value}</td>"; 
  } 
  $output .= "</tr>"; 
} 
$output .= "</table></div>"; 
  
 ?>

Answer 4
 $sql = "SELECT itemID,  userName, commentDate + INTERVAL 3 HOUR FROM table ORDER BY itemID ASC";

Все выдает, кроме commentDate - в котором пустые ячейки.

READ ALSO
Преобразовать текст на php или js

Преобразовать текст на php или js

Есть номер телефона, который висит на сайтеЗадается он через панель управления

223
Как задать логическое и в регулярном выражении?

Как задать логическое и в регулярном выражении?

Собственно вот регулярное выражение которое у меня получилось:

233
Универсальная структура БД

Универсальная структура БД

Хотел написать универсальный каркас для веб приложений, но столкнулся с проблемой проектирования БДЗадумка в следующем: Есть категории,...

194
отправка письма с помощью sendmail

отправка письма с помощью sendmail

2 день пытаюсь найти решение в интернете не получается, многое что перепробовал надеюсь вы мне помочь сможете использую Xampp)

206