回应来自多个表PHP搜索表单的数据

时间:2012-10-31 13:27:44

标签: php sql search post sql-like

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

专辑表:

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

SongsTable:

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

3 个答案:

答案 0 :(得分: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有意义,例如%_;考虑逃避这些。

str_replace(
    array('%', '_'), 
    array('\%', '\_'), 
    mysql_real_escape_string($search)
)

答案 1 :(得分: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>";
}
?>

您应该使用

获得所需的结果

答案 2 :(得分:0)

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

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

$sql1 = "SELECT songs.songName, songs.albumName, albums.* FROM songs, albums WHERE songs.artistId = albums.artistId and songs.songName LIKE '%$search%'";