我有一个 tracklists
表,其中包含轨道列表的 id、name 和 description 以及 Tracks
表包含轨道的 id、name 和 tracklist_id。
现在假设我想显示一个 HTML 表格,其中每行都显示一个轨道列表,如下所示:
我想在单个数据库请求中执行此操作(使用 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/