【问题标题】:Get Results of a search form- MySQL PHP获取搜索表单的结果 - MySQL PHP
【发布时间】:2015-05-26 06:41:40
【问题描述】:

我有一个连接表,它提供了我数据库的所有书籍。并且所有书籍都正常显示。但我需要根据表单中输入的搜索查询来处理它。 这是我的加入查询。

$rs = mysqli_query($connection,"SELECT DISTINCT bk.title As Title, YEAR(bk.date_released) AS Year, bk.price AS Price, cat.name AS Category, pub.name AS Publisher, aut.name AS Author,co.name AS Cover, cp.count AS Copies
            FROM books bk
            JOIN (SELECT book_id, COUNT(*) as count FROM copies GROUP BY book_id) cp
                ON bk.id = cp.book_id
            JOIN category cat
                ON cat.id = bk.category_id
            JOIN publishers pub
                ON pub.id = bk.publisher_id
            JOIN books_covers bk_co
                ON bk_co.book_id = bk.id
            JOIN covers co
                ON co.id = bk_co.cover_id
            JOIN books_authors bk_aut
                ON bk_aut.book_id = bk.id
            JOIN authors aut
                ON aut.id = bk_aut.author_id
            JOIN books_languages bk_lan
                ON bk_lan.book_id = bk.id
            JOIN languages lan
                ON lan.id = bk_lan.lang_id
            JOIN books_locations bk_loc
                ON bk_loc.book_id = bk.id
            JOIN locations loc
                ON loc.id = bk_loc.location_id
            ORDER BY bk.title ASC
                ");
    $copies = mysqli_query($connection,"SELECT DISTINCT COUNT(copies.book_id) FROM copies INNER JOIN books ON copies.book_id=books.id
        ");
    $dup = mysqli_query($connection,"SELECT book_id, COUNT(*) as count FROM copies GROUP BY book_id");
    $rows_copies = mysqli_fetch_array($copies);
    $rows = mysqli_fetch_assoc($rs);
    $tot_rows = mysqli_num_rows($rs);

这是我的搜索表单变量

if(!empty($_GET)){
    $title = $_GET['title'];
    $author = $_GET['author'];
    $isbn = $_GET['isbn'];
    $language = $_GET['language'];
    $publisher = $_GET['publisher'];
    $year = $_GET['year'];
    $category = $_GET['category'];
}else{
    $title = "";
    $author = "";
    $isbn = "";
    $language = "";
    $publisher = "";
    $year = "";
    $category = "";
    $language = "";
}

这是我显示结果的代码,

<div class="jumbo">
   <?php if($tot_rows > 0){  ?>
   <?php do { ?>
       <div class="col-md-3">
           <span class="product-image">

                <img src="<?php echo $rows['Cover'] ?>" class="img-thumbnail product-img" alt="">
            </span>
               <ul class="iteminfo">
                    <li><strong>Title: </strong><?php echo $rows['Title'] ?></li>
                    <li><strong>Category: </strong><?php echo $rows['Category'] ?></li>
                    <li><strong>Author: </strong><?php echo $rows['Author'] ?></li>
                    <li><strong>Price: </strong><?php echo $rows['Price']." Rs" ?></li>
                    <li><strong>Publisher: </strong><?php echo $rows['Publisher'] ?></li>
                    <li><strong>Copies: </strong><?php echo $rows['Copies'] ?></li>
                </ul>
        </div>
    <?php } while($rows=mysqli_fetch_assoc($rs)); }else{ ?>
    <?php echo 'No Results'; }?>
   </div>

我如何仅使用相应的搜索查询进行搜索才能获得结果。例如,如果我搜索一本名为“Romeo Juliet”的书,我只需要显示该书

我尝试使用此代码测试显示,但从未成功

$titlequery = mysqli_query($connection," SELECT * FROM "$rs" WHERE Title = "$title" ");
$rows = mysqli_fetch_assoc($titlequery);

帮我解决这个问题。

【问题讨论】:

  • mysqli_fetch_assoc 只返回一行。您必须循环调用它才能获取所有行。
  • 在您的 $rs 查询中,您需要提供一个 where 语句,它将结果限制为搜索条件。并且,您不能像在 $titlequery 中那样在查询中传递 mysqli result
  • 首先,我认为您的 SQL 连接错误。每次像现在这样在 SQL 语句中添加变量时,都必须使用“.”。连接它,即 "SELECT * FROM ".$rs." WHERE ...."
  • SELECT DISTINCT COUNT(copies.book_id) FROM copies INNER JOIN books ON copies.book_id=books.id 是做什么的?
  • 我之前添加了一个代码,使书籍仅在添加副本时显示。否则不显示。

标签: php mysql database


【解决方案1】:

您正在尝试执行子查询,但您传入的 $rs 变量是资源,而不是字符串。如果您将原始查询设置为变量并将其传入,那么它应该可以工作:

$sql = "SELECT DISTINCT bk.title As Title, YEAR(bk.date_released) AS Year, bk.price AS Price, cat.name AS Category, pub.name AS Publisher, aut.name AS Author,co.name AS Cover, cp.count AS Copies
        FROM books bk
        JOIN (SELECT book_id, COUNT(*) as count FROM copies GROUP BY book_id) cp
            ON bk.id = cp.book_id
        JOIN category cat
            ON cat.id = bk.category_id
        JOIN publishers pub
            ON pub.id = bk.publisher_id
        JOIN books_covers bk_co
            ON bk_co.book_id = bk.id
        JOIN covers co
            ON co.id = bk_co.cover_id
        JOIN books_authors bk_aut
            ON bk_aut.book_id = bk.id
        JOIN authors aut
            ON aut.id = bk_aut.author_id
        JOIN books_languages bk_lan
            ON bk_lan.book_id = bk.id
        JOIN languages lan
            ON lan.id = bk_lan.lang_id
        JOIN books_locations bk_loc
            ON bk_loc.book_id = bk.id
        JOIN locations loc
            ON loc.id = bk_loc.location_id
        ORDER BY bk.title ASC
            ";
$rs = mysqli_query($connection, $query);
$titlequery = mysqli_query($connection, " SELECT * FROM ({$query}) WHERE Title = '{$title}'");

此外,当您需要使用 PHP 引号作为字符串分隔符时,请注意 SQL 查询中的引号。 PHP 会将您的" SELECT * FROM "$rs" WHERE Title = "$title" " 字符串解释为SELECT * FROM$rs 资源、WHERE Title =$title 变量和,但没有任何连接。你需要反斜杠你的 SQL 引用,比如" SELECT * FROM \"$rs\" WHERE Title = \"$title\" ",所以 PHP 不认为你想结束你的字符串。

【讨论】:

    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多