2015-05-26 3 views
0

У меня есть объединенная таблица, и она дает все книги моей базы данных. И все книги отображаются правильно. Но мне нужно работать по поисковым запросам, введенным в форму. это мой запрос для присоединения.Получить результаты поиска - MySQL PHP

$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> 

Как получить результаты только я искал с соответствующими поисковыми запросами. Для примера, если я ищу книгу под названием «Ромео Джульетта» Мне нужно, чтобы отобразить эту книгу только

Я пытался проверить Diplay с этим кодом и никогда не удастся

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

Помогите мне решить эту проблему.

+3

'mysqli_fetch_assoc' просто возвращает одну строку. Вы должны вызвать его в цикле, чтобы получить все строки. – Barmar

+1

В запросе '$ rs' вам необходимо указать оператор where, который ограничит результаты поисковыми критериями. И, вы не можете передать 'mysqli result' в запросе, как вы делаете в' $ titlequery' –

+0

Во-первых, я думаю, что вы неправильно связываете свой SQL. Каждый раз, когда вы добавляете переменную в ваш оператор SQL, как вы сейчас делаете, вы должны использовать «.». для его объединения, т. е. «SELECT * FROM». $ rs. «WHERE ....» –

ответ

0

Вы пытаетесь выполнить подзапрос, но переменная $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}'"); 

Кроме того, смотреть ваши кавычки в запросах SQL, когда вам нужно использовать PHP кавычки, как разделители строк. PHP интерпретирует вашу строку " SELECT * FROM "$rs" WHERE Title = "$title" " как SELECT * FROM, $rs ресурс, WHERE Title =, переменную $title и , но без каких-либо конкатенаций. Вам понадобится обратная косая черта ваших котировок SQL, например " SELECT * FROM \"$rs\" WHERE Title = \"$title\" ", поэтому PHP не думает, что вы хотите закончить свою строку.

Смежные вопросы