[英]Echoing data from multiple tables PHP Search form
我正在嘗試創建一個搜索表單,顯示數據庫中的數據,其中數據的名稱就像搜索詞。 可悲的是,我試圖讓它回顯來自多個表的信息:
專輯表:
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
我能想象到的最簡單的連接是這樣的:
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)
)
請嘗試以下方法:
$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>";
}
?>
您應該使用它獲得所需的結果
您應該使用artistId字段將兩個表連接在一起(可能您可能還有第三個表,其中包含藝術家名稱,因為您沒有在此處顯示)。
所以你的select語句應該是這樣的:
$sql1 = "SELECT songs.songName, songs.albumName, albums.* FROM songs, albums WHERE songs.artistId = albums.artistId and songs.songName LIKE '%$search%'";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.