使用“加入”显示曲目列表的曲目

时间:2015-09-07 21:16:39

标签: php mysql pdo

我有一个tracklists表,其中包含跟踪列表的 id 名称 description 以及tracks表包含 id name tracklist_id 的曲目。

现在假设我要显示一个HTML表格,其中每行显示一个跟踪列表,如下所示:

enter image description here

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

  • 如何制作加入请求以获取每个曲目的曲目列表曲目;
  • 如何处理结果(例如,使用foreach)为每个专辑创建一个(HTML)表格行,同时包含相关的曲目列表。

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

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";

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

1 个答案:

答案 0 :(得分:1)

MySQL Query以获取所有专辑和曲目列表     function listTracks(){     $ sql =&#34; SELECT tkl.id,tkl.name,description,     GROUP_CONCAT(DISTINCT tk.name SEPARATOR&#39;
&#39;)tracklist     来自跟踪列表tkl LEFT OUTER JOIN跟踪tk     ON tk.tracklist_id = tkl.id GROUP BY tkl.id ORDER BY tkl.id DESC&#34;;

convert circles.svg result.png

如果要为查询提供相册ID

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