【问题标题】:Echoing data from multiple tables PHP Search form从多个表中回显数据 PHP 搜索表单
【发布时间】:2012-10-31 13:27:44
【问题描述】:

我正在尝试制作一个搜索表单来显示我的数据库中的数据,其中数据的名称就像搜索词一样。 可悲的是,我正试图让它从多个表中回显信息:

专辑表:

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

【问题讨论】:

  • 你从哪里得到艺术家的名字

标签: php sql search post sql-like


【解决方案1】:

我能想象到的最直接的连接是这样的:

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

【讨论】:

  • 这仅适用于歌曲名称,但我无法按专辑名称搜索。 (除此之外,这是迄今为止最好的)
  • 那你就加OR albumName LIKE '%$search%'
  • 只需将 where 语句更改为专辑名称
  • 干杯,我以前没有使用过“USING (artistID)”这个东西。当我再次遇到这样的事情时,我会试试这个。还在学习!
【解决方案2】:

您应该使用 ArtistId 字段将这两个表连接在一起(您可能还有第三个包含艺术家姓名的表,因为您没有在此处显示)。

所以你的选择语句应该是这样的:

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

【讨论】:

    【解决方案3】:

    尝试以下方法:

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

    你应该得到你需要的结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-20
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 2019-03-31
      • 1970-01-01
      相关资源
      最近更新 更多