我有搜索搜索数据库中的歌曲,目前他们可以按艺术家或歌曲的标题搜索。因此,目前他们可以搜索汤姆琼斯或其不寻常他们无法搜索汤姆琼斯异常。如何使我的当前SQL看起来像这样
SELECT *
FROM songs
WHERE artist LIKE '%$search%'
OR songname LIKE '%$search%'
LIMIT 6
我已将全文搜索添加到artist和songname列。无法解决如何搜索这两行的问题。
答案 0 :(得分:0)
您似乎正在使用tom jones unusual
作为搜索文本'$search'
。当您在like
中使用mysql
时,它将在给定字段中搜索文本模式,但当您输入tom jones unusual
作为搜索文本时,不会出现此类文本。因为tom jones
位于一个字段中,unusual
位于另一个字段中
您可以执行以下操作来完成您想要的操作
tom jones unusual
$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";
}
}