【问题标题】:Fusion Tables filter conditions OR融合表过滤条件或
【发布时间】:2012-05-13 09:38:00
【问题描述】:

根据https://developers.google.com/fusiontables/docs/developers_reference OR 操作不允许作为过滤条件的一部分。所以我试图想出一种创造性的方法来解决以下问题:

我有一个融合表支持的谷歌地图,其中包含数百个地点,并且希望将其过滤到仅具有“标签”或“标题”包含搜索参数的地点。

理想情况下,我可以使用以下作为过滤条件:

tags CONTAINS IGNORING CASE 'searchterm' OR title CONTAINS IGNORING CASE 'searchterm'

但融合表 API 根本不允许这样做。那么该怎么办?进行 2 个单独的查询,然后过滤掉重复项?这意味着我不能使用漂亮的 FusionTablesLayer 预渲染图块功能。

你会怎么做?

【问题讨论】:

    标签: google-maps google-maps-api-3 google-fusion-tables


    【解决方案1】:

    一个可能的答案是预渲染表中的数据。本质上添加另一列,它是标签和标题的聚合。然后我只需要查询一个'tags_or_titles'列。当然,这意味着当我将数据导出到融合表中时,会预先进行更多的数据处理,感觉不是那么好和干净......

    【讨论】:

    • 这是我最终实现的,并且在将所有文本发送到融合表之前实际上并没有花费太多工作来将所有文本预先连接到一列中。 Fusion 表不允许 OR 查询,也不允许字符串连接,这仍然让我感到困扰。
    【解决方案2】:

    如何在表中添加一个名为“Show_In_Results”的列,

    然后运行两个单独的查询,根据是否在特定列中找到搜索词来更新每行数据的该列。

    UPDATE 'table_id'
    SET Show_In_Results = 1
    
    UPDATE 'table_id'
    SET Show_In_Results = 1
    WHERE tags CONTAINS IGNORING CASE 'searchterm' 
    
    UPDATE 'table_id'
    SET Show_In_Results = 1
    WHERE title CONTAINS IGNORING CASE 'searchterm' and Show_In_Results <> 1
    

    然后当你渲染你的地图层时:

    SELECT 'columns' FROM 'table_id' WHERE Show_In_Results = 1
    

    【讨论】:

    • 对不起,遗漏了第二个 where 查询的关键部分。现已更新。
    • 这会起作用,并且是解决问题的一种非常有创意的方法。我不这样做的唯一原因是它在(移动预期的)客户端上增加了额外的延迟,尽管这可能可以忽略不计。另外,我有点担心,如果来自不同客户端的多个请求同时发生,您可能会得到不同步的结果。
    猜你喜欢
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 2012-06-20
    • 2021-11-18
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多