php - 使用加入来显示轨道列表的轨道

标签 php mysql pdo

我有一个 tracklists 表,其中包含轨道列表的 idnamedescription 以及 Tracks 表包含轨道的 idnametracklist_id

现在假设我想显示一个 HTML 表格,其中每行都显示一个轨道列表,如下所示:

enter image description here

我想在单个数据库请求中执行此操作(使用 PDO),但我很难弄清楚:

  • 如何发出加入请求以获取轨道列表信息以及每个轨道的轨道;
  • 如何处理结果(例如使用 foreach)为每个专辑创建一个 (HTML) 表格行,同时包含相关的轨道列表。
<小时/>

首先,我尝试不使用加入请求,而是简单地创建一个输出轨道列表的函数,如下所示:

function listTracks($id) {
  $pdo = dbConnect();

  $request = "SELECT * FROM tracks AS track WHERE album_id = :id";
  $stmt = $pdo->prepare($request);
  $variables = array('id' => $id);

  $result = $stmt->execute($variables);
  $tracks = $stmt->fetchAll();

  $trackList = "";

  foreach ($tracks as $track) {
    $trackList .= "<li>" . $track["name"] . "</li>";
  }

  return $trackList;

}

我注意到发出新的数据库请求来获取每个轨道列表的轨道非常慢,这就是为什么我尝试使用如下请求的加入解决方案:

$request = "SELECT tracks.name, tracklists.*
            FROM tracklists
            INNER JOIN tracks
            ON  tracklists.id = tracks.album_id";

问题是这个请求返回一个数组,我不明白我应该如何按照我想要的方式显示它(我总是最终为每个轨道而不是每个轨道列表制作一个表格行)。

最佳答案

MySQL 查询获取所有专辑和轨道列表 函数列表Tracks() { $sql = "选择 tkl.id, tkl.name, 描述, GROUP_CONCAT(DISTINCT tk.name SEPARATOR '
') 轨道列表 FROM 轨道列表 tkl LEFT OUTER JOIN 轨道 tk ON tk.tracklist_id=tkl.id GROUP BY tkl.id ORDER BY tkl.id DESC";

$stmt = $pdo->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

$list = "";

foreach($result as $tracks => $track){
$list .= "<li>".$track['name']."</li>
<li>".$track['description']."</li>
<li>". $track['tracklist'] ."</li>";
}
return $list;
}

如果您想向查询提供专辑 ID

function listTracks($id) {
$sql = "SELECT tkl.id, tkl.name, description, 
GROUP_CONCAT(DISTINCT tk.name SEPARATOR '<br />') trackslist 
FROM tracklists tkl LEFT OUTER JOIN tracks tk 
ON tk.tracklist_id=tkl.id WHERE tk.id=:id GROUP BY tkl.id ORDER BY tkl.id DESC";
$param = array(':id' => $id);

$stmt = $pdo->prepare($sql);
$stmt->execute($param);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

$list = "";

foreach($result as $tracks => $track){
$list .= "<li>".$track['name']."</li>
<li>".$track['description']."</li>
<li>". $track['tracklist'] ."</li>";
}

return $list;
}

关于php - 使用加入来显示轨道列表的轨道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32446141/

相关文章:

php - 从 MySQL 到 HTML 表格的坐标(PHP、PDO、MySQL)

php - PHP PDO 语句可以接受表名或列名作为参数吗?

javascript - 在 Paypal 中,什么可以保护买家在结账时从他们的账户中扣除正确的金额?

javascript - AJAX + PHP 表单不传递变量?

php - 烦人的查询错误

mysql - 需要一个查询根据另一个表的值对一个表中的值进行排序

php - 更新 MySQL 表中最后 20 行的特定列?

php - PHP中的音频和Zip文件

javascript - PHP 无法访问通过 javascript 代码设置的 session 变量

php - 将 HTML PHP PDO 结合在一起