簡體   English   中英

如何使用PHP在MySQL中過濾數據(一對多關系)

[英]How to filter data in MySQL (One to many relationship) using PHP

我想做的事

用戶將使用GET發送一個值,並將該值存儲在名為$category1的變量$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連接)

表的示例。

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

在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。

否則,我會在本地測試您的代碼,效果非常好。 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM