2012-10-31 62 views
0

我正在試圖製作一個搜索表單,顯示來自我的數據庫的數據,其中數據的名稱與搜索字詞相似。 可悲的是我試圖把它從多個表回波信息:從多個表中回顯數據PHP搜索表單

專輯表:

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 
+2

你從哪裏得到的藝術家的名字 –

回答

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) 
) 
+0

這非常適用於只是歌曲的名字,但我不能用ALBUMNAME搜索。 (除此之外,這是迄今爲止最好的東西) – user1719526

+2

然後你只需添加'OR albumName LIKE'%$ search%'' –

+0

只需將您的where語句更改爲albumName – ajtrichards

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>"; 
} 
?> 

你應該得到你需要使用

0

您應該將兩個表連接在一起使用artistId字段中的結果(可能你也可能有第三由於你沒有在這裏顯示,因此擁有藝術家名字的表格)。

所以,你的select語句應該是這樣的:

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