如何使用PHP过滤MySQL中的数据(一对多关系)

时间:2017-06-28 03:46:48

标签: php mysql

  

我想做什么

用户将使用GET发送值,我会将值存储在名为$category1的变量中。现在将显示包含$category1值的所有行。这就像一个搜索系统。

  

这是我的代码

$stmt = $conn->prepare("SELECT tmdb_movies.movie_title
,GROUP_CONCAT(DISTINCT genres.genres_name SEPARATOR ', ') AS genres

FROM tmdb_movies

JOIN genres ON genres.genres_tmdb_id=tmdb_movies.tmdb_id

WHERE EXISTS (SELECT genres.genres_name FROM genres WHERE genres.genres_name = '$category1');

GROUP BY tmdb_movies.movie_title");

错误:因为WHERE Exist行(IDK,如果我应该使用它或不使用)

  

致命错误:未捕获PDOException:SQLSTATE [42000]:语法错误或访问冲突:1140在没有GROUP BY的聚合查询中,SELECT列表的表达式#1包含非聚合列'DataBaseName.tmdb_movies.movi​​e_title';这与sql_mode = only_full_group_by

不兼容

让我现在解释一下我的表格结构

我有两张桌子

  1. tmdb_movies(它存储电影标题和tmdb_id)
  2. genres(它存储通过tmdb_id连接的流派)
  3. 表格的例子。

      

    tmdb_movies

    tmdb_id     movie_title
    1           The_Dark_Night
    2           Logan
    3           IronMan
    
      

    genres

    tmdb_id       genres
     1            Action
     1            Crime
     1            Drama
     2            Action
     2            Drama
     3            Action
     3            Comedy
    

1 个答案:

答案 0 :(得分:0)

在5.7中,sqlmode默认设置为:

ONLY_FULL_GROUP_BY,
 NO_AUTO_CREATE_USER,
 STRICT_TRANS_TABLES,
 NO_ENGINE_SUBSTITUTION

要删除 ONLY_FULL_GROUP_BY 条款,您可以执行以下操作:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

这假设您需要使用非聚合列创建GROUP BY。

否则我在本地测试你的代码它工作得非常好。 enter image description here