如何使用搜索查询显示两个表中的数据?

时间:2019-08-09 05:40:32

标签: php search mysqli union

我需要根据结果显示特定数据。 我有两个表movie_info =>具有所有电影信息&tv_shows_info =>具有电视节目信息。我有搜索框,如果我输入搜索内容,则应同时从表中搜索并显示数据,但结果中的条件是否具有movie_id,它应该显示电影详细信息,如果结果具有tv_show_id,则它应该显示电视节目详细信息。

到目前为止,我已经使用基本搜索从一个表中获取数据,并且我尝试使用两个表,但是它不起作用。

<?php
// sql query for retrieving data from database
        $sql_query = "SELECT * FROM `movies_info`";
        $result = mysqli_query($connection, $sql_query);

 // SQL Query for filter
        if(isset($_POST['search_button']))
        {
            $value_to_search = $_POST['value_to_search'];

            // search in all table columns
            // using concat mysql function

            $search_query = "SELECT * FROM `movies_info` WHERE CONCAT(`movie_name`, `movie_original_name`, `release_year`, `movie_genre`, `movie_country`, `movie_stars`, `movie_director`) LIKE '%".$value_to_search."%'";

            //$search_query = "SELECT * FROM `movies_info`,`tv_shows_info` WHERE CONCAT(`movie_name`, `release_year`, `movie_genre`, `movie_country`, `tv_show_name`) LIKE '%".$value_to_search."%' GROUP BY `movie_id`";

            //$search_query = "SELECT * FROM `movies_info` UNION ALL `tv_shows_info` WHERE CONCAT(`movie_name`, `release_year`, `movie_genre`, `movie_country`, `tv_show_name`) LIKE '%".$value_to_search."%'";
            //$search_query2 = "SELECT * FROM `tv_shows_info` WHERE CONCAT(`tv_show_name`, `tv_show_start_year`, `tv_show_end_year`, `tv_show_genre`, `tv_show_country`) LIKE '%".$value_to_search."%'";
            //$search_query .= $search_query2;
            $search_result = filterTable($search_query);

        }

        else {
            $search_query = "SELECT * FROM `movies_info`";
            $search_result = filterTable($search_query);        
                //echo 'No Search Results Found';
        }

    ?>  

<!-- /w3l-medile-movies-grids -->
    <div class="general-agileits-w3l">
        <div class="w3l-medile-movies-grids">

                <!-- /movie-browse-agile -->

                      <div class="movie-browse-agile">
                         <!--/browse-agile-w3ls -->
                        <div class="browse-agile-w3ls general-w3ls">
                                <div class="tittle-head">
                                    <h4 class="latest-text">Search Results for : "<?php echo $value_to_search ?>"</h4>
                                    <div class="container">
                                        <div class="agileits-single-top">
                                            <ol class="breadcrumb">

                                              <li><a href="index.php">Home</a></li>
                                              <li class="active" style="text-transform:Capitalize;">Search Results </li>
                                            </ol>
                                        </div>
                                    </div>
                                </div>
                                     <div class="container">
                                    <div class="browse-inner">

                                        <?php

                                            echo $search_result;

                                            $rowcount = mysqli_num_rows($search_result);

                                            for($i=1;$i<=$rowcount;$i++){
                                            $row=mysqli_fetch_array($search_result);


                                        ?>

                               <div class="col-md-2 w3l-movie-gride-agile">
                                         <a href="movie.php?movie_id=<?php echo $row['movie_id']; ?>" class="hvr-shutter-out-horizontal"><img src="<?php echo $row['movie_image']; ?>" title="<?php echo $row['movie_name']; ?>" alt=" " />
                                         <div class="w3l-action-icon"><i class="fa fa-play-circle" aria-hidden="true"></i></div>
                                    </a>
                                      <div class="mid-1">
                                        <div class="w3l-movie-text">
                                            <h6><a href="movie.php?movie_id=<?php echo $row['movie_id']; ?>"><?php echo $row['movie_name']; ?></a></h6>                         
                                        </div>
                                        <div class="mid-2">

                                            <p><?php echo $row['release_year']; ?></p>
                                            <div class="block-stars">
                                                <ul class="w3l-ratings">

                                                         <li> 
                                                          <span>IMDB <i class="fa fa-star" aria-hidden="true"></i> <?php echo $row['movie_rating']; ?> </span>
                                                         </li>

                                                </ul>
                                            </div>
                                            <div class="clearfix"></div>
                                        </div>

                                    </div>
                                    <div class="ribben two">
                                        <p>NEW</p>
                                    </div>  
                                                </div> <?php } ?>
                                </div>

到目前为止,我可以从一张表中获取值。

我的确切需求是可以是电影或电视节目,但如果是电影,它应该显示一些特定的信息,如果是电视节目,它应该显示一些其他的信息,我应该从表中获取数据。 / p>

1 个答案:

答案 0 :(得分:0)

首先,您需要使用准备好的语句,即使您在MySQL中使用LIKE函数也可以使用它们。然后,您需要在列名称之间添加空格,以防止这些值像“ star warsstar wars”那样被混合在一起。当用户搜索不准确的“ ss”时,将导致像“星球大战”这样的电影。

$search_result = array(); 
$search_query = "SELECT * FROM `movies_info` WHERE CONCAT(`movie_name`,' ', `movie_original_name`,' ',`release_year`,' ',`movie_genre`,' ',`movie_country`,' ',`movie_stars`,' ',`movie_director`) LIKE CONCAT('%',?,'%')";
if($stmt = $db->prepare($search_query)){
        $stmt->bind_param('ii',$_SESSION['iidn_reference'],$o['parent_ref_id']);
        if($stmt and $stmt->execute()){
            $result = $stmt->get_result();
            while($row = $result->fetch_array(MYSQLI_ASSOC)){
                $search_result[] = $row;
            }
        }
}

之后,您可以将这些表与MySQL UNION结合使用,但我强烈建议您只搜索两个表并为表名加上别名以匹配。

SELECT 'movie' as `type`, `movie_id` as `id`, `movie_name` as `name`...
SELECT 'show' as `type`, `show_id` as `id`, `show_name` as `name`...