0

データベースのデータを表示する検索フォームを作成しようとしています。データの名前は検索語のようです。悲しいことに、私はそれを複数のテーブルからの情報をエコーするようにしようとしています:

アルバムテーブル:

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

歌の表:

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
4

3 に答える 3

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)
)
于 2012-10-31T13:30:51.970 に答える
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>";
}
?>

あなたはそれを使ってあなたが必要とする結果を得るはずです

于 2012-10-31T13:32:41.447 に答える
0

アーティストIDフィールドを使用して2つのテーブルを接続する必要があります(ここには表示されていないため、おそらくアーティスト名を保持する3番目のテーブルもある可能性があります)。

したがって、selectステートメントは次のようになります。

$sql1 = "SELECT songs.songName, songs.albumName, albums.* FROM songs, albums WHERE songs.artistId = albums.artistId and songs.songName LIKE '%$search%'";   
于 2012-10-31T13:33:11.287 に答える