【问题标题】:Flip table content on select/view with MySQL?使用 MySQL 在选择/查看时翻转表内容?
【发布时间】:2021-04-25 11:14:09
【问题描述】:

我是一个绝对的 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,",");

?>

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

【问题讨论】:

    标签: php mysql database


    【解决方案1】:

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

    $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);
    

    这里live PHP example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-02
      • 2013-09-09
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      相关资源
      最近更新 更多