[英]Flip table content on select/view with MySQL?
我是絕對的 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 端獲取我的數據時,我只能 select 假設 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,",");
?>
它有效,但正如我之前所說,我選擇了錯誤的數據集。 也許你們中的任何一個魔術師都知道如何輕松解決整個問題。 我將不勝感激任何提示、技巧或解決方案! 提前致謝!
您可以使用下一個代碼來聚合選定的數據:
$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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.