我正在尝试运行子查询,以便我可以排序&输出结果根据搜索词出现在哪个标记列中。查询在没有子查询的情况下运行正常但是我得到'mysqli_num_rows()期望参数1是mysqli_result,boolean给出'错误。任何帮助非常感谢。
$sql = "SELECT * FROM (SELECT trackname, tag1, tag2, tag3, tag4, tag5, songtitle, zip_link, album_id, description, album_name, album_desc, small_logo FROM albums, tracks WHERE
(tag1 = '{$search_tag}' OR
tag2 = '{$search_tag}' OR
tag3 = '{$search_tag}' OR
tag4 = '{$search_tag}' OR
tag5 = '{$search_tag}') AND tracks.album_id = albums.id ) ORDER BY tag1
";
} else {
echo '<br/>please enter a search word or phrase<br/><br/>';
die;
}
$result = mysqli_query ($mysqli, $sql);
if($result === false) { echo 'mysql error'; }
$count=mysqli_num_rows($result);
if ($count < 1) {echo '<span class="sorry">sorry - your search returned no results</div><br/>';}
else { while ($row = mysqli_fetch_array($result))
` {
答案 0 :(得分:1)
为什么使用子查询?以下似乎是您想要的查询:
SELECT trackname, tag1, tag2, tag3, tag4, tag5, songtitle, zip_link, album_id,
description, album_name, album_desc, small_logo
FROM albums join
tracks
on tracks.album_id = albums.id
WHERE '{$search_tag}' in (tag1, tag2, tag3, tag4, tag5)
ORDER BY tag1;
另请注意使用正确的join
语法并使用in
来简化where
逻辑。
答案 1 :(得分:1)
您的查询中似乎有一个错误,这就是$result
为假且最终mysqli_num_rows($result)
抱怨的原因。
另一个问题是,虽然您正在检查$result
,但您只是让执行继续。 if($result === false) { echo 'mysql error'; }
将打印mysql errror
然后继续。因此,为了停止执行,您可以在其中添加die
,以便在无效结果的情况下您的程序停止执行。
我的另一个建议是利用提供的功能更好地查看错误。你应该至少有这个:
if($result === false) {
print mysqli_error($mysqli);
die;
}
这样做可以帮助您确定确切错误的位置。在这种情况下你的查询。
似乎有很多答案显示您对查询的修复,所以我不打算只复制并粘贴它们!请参阅其他答案以修复您的查询。
答案 2 :(得分:0)
尝试
"SELECT * FROM (SELECT trackname, tag1, tag2, tag3, tag4, tag5, songtitle, zip_link, album_id, description, album_name, album_desc, small_logo FROM albums, tracks WHERE
(tag1 = '{$search_tag}' OR
tag2 = '{$search_tag}' OR
tag3 = '{$search_tag}' OR
tag4 = '{$search_tag}' OR
tag5 = '{$search_tag}') AND tracks.album_id = albums.id )temp ORDER BY tag1
";