我正在尝试创建一个搜索表单,显示数据库中的数据,其中数据的名称就像搜索词。 可悲的是,我试图让它回应来自多个表的信息:
专辑表:
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
答案 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%'";