Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Нестандартный вид вывода таблицы в php из MySql

#php #javascript #mysql #mysqli


Доброго времени суток, прошу помощи,
ситуация такая:
есть таблица в MySql:


задача: вывести ее на страницу в виде:


шапку таблицы создавал следующим образом:


                            
                             
                          connect_errno) {
    printf("Соединение не удалось: %s\n", $mysqli->connect_error);
    exit();
}
$sqltableclandate = "SELECT * FROM  `nametable` GROUP BY Date";
$sqltableclanResultdate = $mysqli->query($sqltableclandate);  
while($tableclandate = $sqltableclanResultdate->fetch_assoc()) 
{?>
                                
                                
                                
                            


А вот дальше затык....

Подскажите куда копать и где искать)

Забыл вчера добавить:
Добавление: если за какую-то дату нет информации, то в ячейке должен быть 0 или Н/Д

Добавление всего кода таблицы на данный момент:


Статистика:

query($query_dateclan)){ $rowclandate=$resultclandate->fetch_assoc(); $kol_rowsclandate = $resultclandate->num_rows; for($i=0; $i<$kol_rowsclandate; $i++){?>
Дата
вид базы: таблица: stat (как видно name5 появился позже)


Ответы

Ответ 1



Можно воспользоваться функцией GROUP_CONCAT(), которая позволяет вывести списки каждой из групп, получаемых GROUP BY. Обычно в GROUP_CONCAT() передают имя столбца, но тут потребуется два значения - дата и gold. Их можно объединить при помощи CONCAT() каким-нибудь уникальным разделителем, например, решеткой. SELECT GROUP_CONCAT(CONCAT(data, "#", gold)) AS data_gold FROM gold GROUP BY name +-------------------------------------------+ | data_gold | +-------------------------------------------+ | 2016-08-27#10,2016-08-28#15,2016-08-29#20 | | 2016-08-27#20,2016-08-28#25,2016-08-29#30 | | 2016-08-27#30,2016-08-28#35,2016-08-29#40 | | 2016-08-27#40,2016-08-28#45,2016-08-29#50 | +-------------------------------------------+ В PHP-коде можно сначала разбить строку по запятой (например, функцией explode()), а потом каждый элемент полученного массива еще раз разбить по #. GROUP_CONCAT допускает сортировку, а по полученной дате вы всегда сможете определить к какой ячейке должен относиться текущей элемент. Для формирования результирующей таблицы можно воспользоваться следующим PHP-кодом: PDO::ERRMODE_EXCEPTION)); function parse_gold($str) { $elements = explode(',', $str); $arr = array(); foreach($elements as $el) { list($date, $gold) = explode('#', $el); $arr[$date] = $gold; } return $arr; } $query = "SELECT name, GROUP_CONCAT(CONCAT(data, '#', gold)) AS data_gold FROM gold GROUP BY name"; $usr = $pdo->query($query); $users = array(); while($user = $usr->fetch()) { $users[$user['name']] = parse_gold($user['data_gold']); } $dates = array(); foreach($users as $user) { $dates += array_keys($user); } echo ''; // Шапка echo ''; foreach($dates as $date) { echo ""; } echo ''; // Содержимое таблицы foreach($users as $name => $golds) { echo ''; echo ""; foreach($dates as $date) { if(array_key_exists($date, $golds)) { echo ""; } else { echo ""; } } echo ''; } echo '
Имя$date
$name{$golds[$date]}-
'; } catch (PDOException $e) { echo "Ошибка выполнения запроса: " . $e->getMessage(); }

Ответ 2



вытяни данные с базы и сохрани в массив, а дальше через обычный foreach строишь таблицу это пример, если не знаешь как, кидай весь файл помогу

Комментариев нет:

Отправить комментарий