sql查询从2个字段中搜索mysql全文

时间:2014-12-10 03:09:25

标签: mysql mysqli

我有搜索搜索数据库中的歌曲,目前他们可以按艺术家或歌曲的标题搜索。因此,目前他们可以搜索汤姆琼斯或其不寻常他们无法搜索汤姆琼斯异常。如何使我的当前SQL看起来像这样

SELECT * 
FROM songs  
WHERE artist LIKE '%$search%' 
   OR songname LIKE '%$search%' 
LIMIT 6

我已将全文搜索添加到artist和songname列。无法解决如何搜索这两行的问题。

2 个答案:

答案 0 :(得分:0)

您似乎正在使用tom jones unusual作为搜索文本'$search'。当您在like中使用mysql时,它将在给定字段中搜索文本模式,但当您输入tom jones unusual作为搜索文本时,不会出现此类文本。因为tom jones位于一个字段中,unusual位于另一个字段中

您可以执行以下操作来完成您想要的操作

  • 获取完整的搜索文本tom jones unusual
  • 将搜索文本从空格分割为单独的变量ex $ser1 = tom; $ser2 = jones; $ser3 = unusual;
  • 然后在mysql
  • 中执行此类操作

select * from song where artist like '%$ser1%' or '%$ser2%' or '%$ser3%' or songname like '%$ser1%' or '%$ser2%' or '%$ser3%'

答案 1 :(得分:0)

解决方法是使用全文搜索。首先需要在全文搜索中定义要使用的行,可以使用以下mysql命令

执行此操作
ALTER TABLE  songs 
ADD FULLTEXT(artist, songtitle)

然后sql查询

$sql = "SELECT * FROM songs WHERE MATCH (songname, artist) AGAINST ('$search')  LIMIT 6";

如果您在输入完整的单词之前需要相似的结果,那么只有在匹配的单词时才会返回结果。您可以这样。

$sql = "SELECT * FROM songs WHERE MATCH (songname, artist) AGAINST ('$search' IN BOOLEAN MODE)  LIMIT 6";
$sqllike = "SELECT * FROM songs  WHERE artist like '%$search%' OR songname like '%$search%' LIMIT 6";
$result = mysqli_query($con, $sql);
$resultlike = mysqli_query($con, $sqllike);

if (mysqli_num_rows($result) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        echo "<a href='". $row["songid"] . "' class='songclicker'>";
        echo "<div class='song whitefont'>";
        echo "<img src='" . $row["artwork"]."' class='songimage'>";
        echo "<p>". $row["songname"] . "</p>";
        echo "<p>". $row["artist"] . "</p></div>";

    }
    echo "<a href='". urlencode($search) ."'><h1 class='seeall'>See all search results</h1></a>";
} else {
    if (mysqli_num_rows($resultlike) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($resultlike)) {
        echo "<a href='". $row["songid"] . "' class='songclicker'>";
        echo "<div class='song whitefont'>";
        echo "<img src='" . $row["artwork"]."' class='songimage'>";
        echo "<p>". $row["songname"] . "</p>";
        echo "<p>". $row["artist"] . "</p></div>";

    }

    echo "<a href='searchresults.php'><h1 class='seeall'>See all search results</h1></a>";
} else {
    echo "0 results";
}
}