0

我正在尝试制作一个搜索表单来显示我的数据库中的数据,其中数据的名称就像搜索词一样。可悲的是,我试图让它从多个表中回显信息:

专辑表:

albumName      albumArt       artistID
----------    ----------      ---------
album1        art1.jpg        1
album2        art2.jpg        2
album3        art3.jpg        3

歌曲表:

songName      artistID       
--------      ---------       
song1         1          
song2         1         
song3         2         
song4         3         
song5         3         

示例 PHP:

$search = $_POST['search'];    
$sql1 = "SELECT * FROM songs WHERE songName LIKE '%$search%'";    
$searchResult = mysql_query($sql1);    

while ($result = mysql_fetch_array($searchResult)) {
echo "<tr>
     <td>".$result['songName']."</td>
     <td>".$result['albumName']."</td>
     </tr>";
}
?>

我不确定内部连接是否可以解决问题,我已经阅读了尽可能多的教程,但没有一个我可以理解或使用。

搜索词来自另一个页面上的表单,这只是处理页面,但它也回显了信息。

如果有人搜索“S”,我需要查询返回类似于下面的内容:

songName      albumname       artistName
----------    ----------      ---------
song1         album1          artist1
song2         album2          artist2
song3         album3          artist3
4

3 回答 3

2

我能想象的最直接的加入是这样的:

SELECT * FROM songs 
INNER JOIN albums USING (artistID)
WHERE songName LIKE '%$search%'

顺便说一句,你真的应该正确地逃避你的变量:

$sql = "SELECT * FROM songs 
    INNER JOIN albums USING (artistID)
    WHERE songName LIKE '%" . mysql_real_escape_string($search) . "%'";

并且有些字符有 的含义LIKE,例如%and _; 考虑逃避那些。

str_replace(
    array('%', '_'), 
    array('\%', '\_'), 
    mysql_real_escape_string($search)
)
于 2012-10-31T13:30:51.970 回答
0

尝试以下操作:

$search = $_POST['search'];    
$sql1 = "SELECT albumns.*, songs.songName FROM songs INNER JOIN albums ON albumns.artistID = songs.artistID WHERE songName LIKE '%$search%'";    
$searchResult = mysql_query($sql1);    

while ($result = mysql_fetch_array($searchResult)) {
echo "<tr>
     <td>".$result['songName']."</td>
     <td>".$result['albumName']."</td>
     </tr>";
}
?>

你应该得到你需要的结果

于 2012-10-31T13:32:41.447 回答
0

您应该使用 ArtistId 字段将这两个表连接在一起(您可能还有第三个包含艺术家姓名的表,因为您没有在此处显示)。

所以你的选择语句应该是这样的:

$sql1 = "SELECT songs.songName, songs.albumName, albums.* FROM songs, albums WHERE songs.artistId = albums.artistId and songs.songName LIKE '%$search%'";   
于 2012-10-31T13:33:11.287 回答