我的数据库结构如下:
Movie Name GenreID**
Movie1 1,2,3
Movie2 2,4
Movie3 4,5,16
我需要根据用户选择的类型ID选择一个电影名称,我将其放入genreIDArray[]
比方说,genreIDArray的值为:$genreIDArray = ['1','2','3'];
我当前的查询方法是ff:
在这里,我将每个ID准备成部分,因此结果不会变为genreID LIKE (%1,2,3%)
,因为我检查了这不起作用。
所以我做了这个分离循环:
$queryParts = array();
foreach($genresIDArray as $genreID) {
$queryParts[] = "'%".$genreID."%'";
}
在分离循环之后,我将最终查询放在一起:
$genreString = implode(" OR genreID LIKE ",$queryParts);
$genreQuery = " SELECT * FROM movies WHERE (genreID LIKE {$genreString}) ";
给了我最后的查询输出:
SELECT * FROM movies WHERE (genreID LIKE '%1%' OR genreID LIKE '%2%' OR genreID LIKE '%3%')
这实际上有效,但显然效率不高,因为genreID 11,12,13
等以1
开头也是如此。我想我在这里错过了MYSQL LIKE逻辑。我已经尝试了'%$genreID'
,这意味着要选择表格数据的starting
或first
数字/字母,但这仍然是一样的,$genreID%
没有,并且会不起作用,因为这只意味着genreid ENDING字母/数字将被选中。
我希望我能说清楚这一点。我在这里绑定。请帮忙。 非常感谢你。
答案 0 :(得分:0)
有一个非常酷的功能。您可以使用FIND_IN_SET
。
SELECT * FROM test WHERE FIND_IN_SET(1,colors)
但如果可能的话,你应该避免数据库中的这种结构并规范化你的数据库。