首页 > 解决方案 > MySql 只过滤一个 id

问题描述

我用mysql过滤流派。但是只有那些有 22 个 id 的过滤器 22,23,24 以那些 22 的形式过滤,但不过滤它们。

示例,我的genre_id 列:22,23,24 不显示过滤器示例,我的genre_id 列:22 显示过滤器。

else if($_POST['lang_id']!=''  && $_POST['genre_id']!='')
  {
      $lang_id=$_POST['lang_id'];
      $genre_id=$_POST['genre_id'];

      $sql="SELECT tbl_language.`language_name`,tbl_movies.* FROM tbl_movies
          LEFT JOIN tbl_language ON tbl_movies.`language_id`= tbl_language.`id` 
          WHERE tbl_movies.`language_id`='$lang_id' AND FIND_IN_SET(tbl_movies.`genre_id`,$genre_id)
          ORDER BY tbl_movies.`id` DESC";
  }
  else if($_POST['lang_id']==''  && $_POST['genre_id']!='')
  {
      $genre_id=$_POST['genre_id'];
      $sql="SELECT tbl_language.`language_name`,tbl_movies.* FROM tbl_movies
          LEFT JOIN tbl_language ON tbl_movies.`language_id`= tbl_language.`id` 
          WHERE FIND_IN_SET(tbl_movies.`genre_id`,$genre_id)
          ORDER BY tbl_movies.`id` DESC";
  }

// 我的搜索代码

<div class="search_list" style="padding: 0px 0px 5px;float: left;margin-left: 20px">
                    <select name="genre_id" class="form-control" style="padding: 5px 10px;height: 40px;">
                      <option value="">--Genres--</option>
                      <?php 
                        $qry="SELECT * FROM tbl_genres ORDER BY gid DESC";
                        $res=mysqli_query($mysqli, $qry) or die(mysqli_error($mysqli));
                        while ($info=mysqli_fetch_assoc($res)) {
                          ?>
                          <option value="<?=$info['gid']?>" <?php if(isset($_POST['genre_id']) && $_POST['genre_id']==$info['gid']){ echo 'selected';} ?>><?=$info['genre_name']?></option>
                          <?php
                        }
                        mysqli_free_result($res);
                      ?>
                    </select>
                    <button class="btn btn-primary" style="padding: 5px 10px;height: 40px;margin-left: 10px;transform: none !important;"><i class="fa fa-filter"></i> Filtrele</button>
                </div>
              </div>

标签: phpmysql

解决方案


当使用FIND_IN_SET()定义是...

FIND_IN_SET(str,strlist)

所以第一个是单个值(22),第二个是列表(22,23,24),你以错误的方式传递参数,所以......

FIND_IN_SET(tbl_movies.`genre_id`,$genre_id) 

应该

FIND_IN_SET($genre_id, tbl_movies.`genre_id`)

推荐阅读