我在数据库中有一些电影信息,简化如下:
table movie
-----------
id title
1234 batman
4456 spiderman
table movie_info
-----------------
id movie_id info_type_id info
1 1234 1 USA
2 1234 1 Canada
3 1234 2 Action
3 1234 2 Drama
4 4456 1 France
table info_type
---------------
id info_type
1 country
2 genre
我要做的是创建一个地图,显示电影的创建位置,然后尝试按类型过滤它们。映射部分可以工作但是当我按类型过滤时,它只显示所有电影,当我将类型设置为Null作为过滤器时..
我在计算字段中尝试了很多东西,并在movie_id上将自定义SQL加入数据源,但似乎没有任何工作。如果有人能指出我正确的方向来解决这个问题,我将不胜感激。
计算字段: 制作国家:
IF[info_type_id]=8
THEN [info]
END
类型:
IF[info_type_id]=3
THEN [info]
END
自定义SQL(适用于流派):
SELECT movie_id, info AS genre
FROM movie_info
WHERE info_type_id=3
答案 0 :(得分:1)
首先:这是一个评论而不是一个答案,但你的表格布局是不合逻辑的。
ID字段传统上是唯一标识符。相反,您正在使用它来复制您的info_type。我认为这是一个错字,除了你使用伪代码部分中的数值作为info_type_id。
如果要关联数值,请使用单独的查找表:
表格信息类型
id name
1 country
3 genre
并且你将它与movie_id相关联,因此info_type将是2或1而不是文本值
关于你的过滤器,没有代码,我猜你正在做什么,但让代码遵循这种模式:
If [filter] == "ALL"
return all entries with an info_type of genre (whether you get them from an array or querying the DB (Select * from movie_info where info_type="genre"))
Else
return all entries with the info value of [filter] (whether you get them from an array or querying the DB (Select * from movie_info where info_type="genre" and info="[filter]"))
两个操作之间的区别在于all会对info_type值起作用,而另一个则对info值起作用。无论您是从数组还是数据库中进行循环/选择,逻辑都是一样的。