使用PHP / MySQL运行SQL查询,然后重新排序结果

时间:2013-12-14 14:50:11

标签: php mysql sql

我正在尝试运行子查询,以便我可以排序&输出结果根据搜索词出现在哪个标记列中。查询在没有子查询的情况下运行正常但是我得到'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)) 
                `       {   

3 个答案:

答案 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
    ";