[英]Select data from my three tables
我有三张桌子,一张叫album
,另一张是soundtrack
,最后但并非最不重要的是artist
。
一张专辑下有多个曲目(很明显)和一个艺术家的名字...
因此,它应该是这样的:
所需输出:
|---------------------|
|AlbumName by Charlie |
|---------------------|
| 1. See you again |
|---------------------|
| 2. One call Away |
|---------------------|
| Album by Ed Sheeran |
|---------------------|
| 1. Perfect |
|---------------------|
| 2. Dive |
|---------------------|
下面是mysqli_fetch_array()
,它与while-loop
用于填充<table>
标记。
$query = "SELECT a.* AS Album, b.* AS Track, c.* AS Artist
FROM album a
INNER JOIN track b ON a.album_id=b.album_id
INNER JOIN artist c ON a.artist_id=c.artist_id
ORDER BY a.album_id ASC";
$result = mysqli_query($con, $query);
$c=0;
while($row = mysqli_fetch_assoc($result)) {
$album = $row['Album']." (".$row['Artist'].") ";
$track = $row['Track'];
}
问题是,当我运行这段代码时……我只能得到这个结果……
|---------------------|
|AlbumName by Charlie |
|---------------------|
| 1. See you again |
|---------------------|
| 2. One call away |
|---------------------|
| 1. Perfect |
|---------------------|
| 2. Dive |
|---------------------|
它获得了原声带的列表,包括原声带的ID,但是, Album Name
上的情况并不理想
我希望它看起来像“ 所需的输出” 。 有任何想法吗? 我尝试搜索stackoverflow,但似乎无法指导我解决同一问题,因此我自己做了一个。 请原谅(不要标记)我是否已经存在,只是我不知道在哪里找到它。 还有pleeeeease ...我需要一个立即有效的答案。 多谢你们!
至于数据库结构
album = {album_id, artist_id,album_title}
artist = {artist_id, artist_name}
track = {song_id, album_id, song_title}
更新!
好的,这有点失控了。 当我尝试@swellar的建议时,发生了什么事。 当我撤消它时,输出保持不变。 看到下面的结果...
|---------------------|
|AlbumName by Charlie |
|---------------------|
| 1. See you again |
|---------------------|
|AlbumName by Charlie |
|---------------------|
| 2. One Call Away |
|---------------------|
|AlbumName by Charlie |
|---------------------|
| 1. Perfect |
|---------------------|
|AlbumName by Charlie |
|---------------------|
| 2. Dive |
|---------------------|
我想要的是给每个Album
一个或多个配乐,但是每次我敢更改query
时,它都会变得混乱。 如何mysqli_fetch_array()
使其显示所需的输出?
这是你的SQL
注意,我在那边下了3个订单。 首先是歌手姓名,这会将所有歌手的资料分组在一起,然后是专辑名称,然后是歌曲ID。
$sql = "SELECT a.album_title AS Album,
t.song_title AS Track,
t.song_id AS ID,
n.artist_name AS Artist
FROM album AS a
INNER JOIN track AS t
ON a.album_id = t.album_id
INNER JOIN artist AS n
ON a.artist_id = n.artist_ID
ORDER BY n.artist_name ASC,
a.album_id ASC,
t.song_id ASC";
/*
That SQL will generate the following array
Array
(
[Album] => AlbumName
[Track] => See you again
[ID] => 1
[Artist] => Charlie
)
Array
(
[Album] => AlbumName
[Track] => One call Away
[ID] => 2
[Artist] => Charlie
)
Array
(
[Album] => Album
[Track] => Perfect
[ID] => 1
[Artist] => Ed Sheeran
)
Array
(
[Album] => Album
[Track] => Dive
[ID] => 2
[Artist] => Ed Sheeran
)
*/
以下是您的while循环
<table>
<?php
// Some placeholders
$album = null;
while($row = mysqli_fetch_assoc($result))
{
if($row['Album'] !== $album)
{
?>
<tr>
<td style="border: 1px solid #000000; background-color: #dedede;"><?php echo $row['Album']; ?> by <?php echo $row['Artist']; ?></td>
</tr>
<tr>
<td style="border: 1px solid #000000;"><?php echo $row['ID']; ?>: <?php echo $row['Track']; ?></td>
</tr>
<?php
}
else
{
?>
<tr>
<td style="border: 1px solid #000000;"><?php echo $row['ID']; ?>: <?php echo $row['Track']; ?></td>
</tr>
<?php
}
$album = $row['Album'];
}
?>
</table>
总输出为:
<table> <tr> <td style="border: 1px solid #000000; background-color: #dedede;">AlbumName by Charlie</td> </tr> <tr> <td style="border: 1px solid #000000;">1: See you again</td> </tr> <tr> <td style="border: 1px solid #000000;">2: One call Away</td> </tr> <tr> <td style="border: 1px solid #000000; background-color: #dedede;">Album by Ed Sheeran</td> </tr> <tr> <td style="border: 1px solid #000000;">1: Perfect</td> </tr> <tr> <td style="border: 1px solid #000000;">2: Dive</td> </tr> </table>
有更好的方法可以解决此问题,但是不知道您的工作环境,技能,要求,其他代码,这是您基于其解决方案的最佳快速而又肮脏的解决方案。 这可以满足您的要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.