#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 '
| Имя | '; 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 строишь таблицу это пример, если не знаешь как, кидай весь файл помогу
Комментариев нет:
Отправить комментарий