#php #javascript #mysql #mysqli
Доброго времени суток, прошу помощи, ситуация такая: есть таблица в MySql: задача: вывести ее на страницу в виде: шапку таблицы создавал следующим образом:А вот дальше затык.... Подскажите куда копать и где искать) Забыл вчера добавить: Добавление: если за какую-то дату нет информации, то в ячейке должен быть 0 или Н/Д Добавление всего кода таблицы на данный момент: 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()) {?> вид базы: таблица: stat (как видно name5 появился позже)Статистика:
Дата query($query_dateclan)){ $rowclandate=$resultclandate->fetch_assoc(); $kol_rowsclandate = $resultclandate->num_rows; for($i=0; $i<$kol_rowsclandate; $i++){?>
Ответы
Ответ 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 '
Имя | '; foreach($dates as $date) { echo "$date | "; } echo '|
$name | "; foreach($dates as $date) { if(array_key_exists($date, $golds)) { echo "{$golds[$date]} | "; } else { echo "- | "; } } echo '
Ответ 2
вытяни данные с базы и сохрани в массив, а дальше через обычный foreach строишь таблицу это пример, если не знаешь как, кидай весь файл помогу
Комментариев нет:
Отправить комментарий