0

我是绝对的 DB/MySQL 初学者,所以我不确定我是否在问正确的问题,但我想试一试。

我为播客设置了一个 Wordpress 页面,该页面在其 MySQL 数据库中按日期计算下载量。为了跟踪下载,我设法构建了一个如下所示的 VIEW:

+-----------+-------------+-------+--------------+-------------+--------------+
| EpisodeID | ReleaseDate | Title | Downloads24h | Downloads7d | Downloads14d |
+-----------+-------------+-------+--------------+-------------+--------------+
| 88        | 2018/01/01  | E01   | 83           | 146         | 207          |
| 124       | 2018/01/15  | E02   | 50           | 92          | 156          |
| 172       | 2018/02/15  | E03   | 71           | 100         | 186          |
| 303       | 2020/03/15  | E04   | 92           | 183         | 328          |
+-----------+-------------+-------+--------------+-------------+--------------+

因为我还想有一些很酷的图表,所以我在我的服务器上设置了 ChartJS 并尝试使用我的 VIEW 中的数据,但不幸的是它要求列中的数据。这意味着当我从 php 端获取数据时,我只能选择比如说 Downloads24h,它在折线图中以 [83,50,71,92] 结尾,这显然没有意义。

所以我需要做的是以某种方式将桌子翻转成这样的东西:

+--------------+-----+-----+-----+-----+
| Title        | E01 | E02 | E03 | E04 |
+--------------+-----+-----+-----+-----+
| Downloads24h | 83  | 50  | 71  | 92  |
| Downloads7d  | 146 | 92  | 100 | 183 |
| Downloads14d | 207 | 156 | 186 | 328 |
+--------------+-----+-----+-----+-----+

正如你所看到的,我什至不依赖每集的 ID 和发布日期,因为我只需要用折线图来可视化这些数字。我正在考虑另一个需要动态的视图,因为还有更多剧集。在实际表中,到目前为止已经超过 25 集,但为了简单起见,我将其淡化了。

我希望有一个超级简单的解决方案,我只是不知道,甚至可能在 php 方面。我目前正在做的事情如下:

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$Title= '';
$Downloads24H = '';
$Downloads7d = '';
$Downloads14d = '';

$sql = "SELECT * FROM `DSI_CAST_STATS_EPISODELIST`";
$result = mysqli_query($conn, $sql);


while ($row = mysqli_fetch_array($result)){
    
$Title= $Title. '"'. $row['Title'].'",';
$Downloads24H = $Downloads24H . '"'. $row['Downloads24H'].'",';
$Downloads7d  = $Downloads7d  . '"'. $row['Downloads7d'].'",';
$Downloads14d = $Downloads14d . '"'. $row['Downloads14d'].'",';
}


$Title= trim($Title,",");
$Downloads24H = trim($Downloads24H,",");
$Downloads7d  = trim($Downloads7d,",");
$Downloads14d = trim($Downloads14d,",");

?>

它有效,但正如我之前所说,我选择了错误的数据集。也许你们中的任何一个魔术师都知道如何轻松解决整个问题。我将不胜感激任何提示、技巧或解决方案!提前致谢!

4

1 回答 1

0

您可以使用下一个代码来聚合选定的数据:

$sql = "SELECT * FROM DSI_CAST_STATS_EPISODELIST;";
$result = mysqli_query($conn, $sql);

$data = [
    'Title' => [],
    'Downloads24h' => [],
    'Downloads7d' => [],
    'Downloads14D' => []
];

while ($row = mysqli_fetch_array($result)) {
    $data['Title'][] = $row["Title"];
    $data['Downloads24h'][] = $row["Downloads24h"];
    $data['Downloads7d'][] = $row["Downloads7d"];
    $data['Downloads14d'][] = $row["Downloads14d"];
}

var_export($data);

这里是现场 PHP 示例

于 2021-04-25T12:40:52.167 回答