Доброго времени суток, прошу помощи,
ситуация такая:
есть таблица в MySql:
задача: вывести ее на страницу в виде:
шапку таблицы создавал следующим образом:
connect_errno) {
printf("Соединение не удалось: %s
", $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 появился позже)
Ответ
Можно воспользоваться функцией 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 '
Комментариев нет:
Отправить комментарий