簡體   English   中英

回應來自多個表PHP搜索表單的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM