为什么此查询不返回任何结果?

时间:2016-04-29 19:43:28

标签: clojurescript datascript

鉴于数据脚本db的这些定义,

(def schema
  {:tag/name { :db/unique :db.unique/identity }
   :item/tag {:db/valueType   :db.type/ref
               :db/cardinality :db.cardinality/many}
   :outfit/item {:db/valueType   :db.type/ref
                 :db/cardinality :db.cardinality/many}}
)
(defonce conn (d/create-conn schema))

(defn new-entity! [conn attrs]
  (let [entity (merge attrs {:db/id -1})
        txn-result (d/transact! conn [entity])
        temp-ids (:tempids txn-result)]
    (temp-ids -1)))

(defonce init
  (let [tag1    (new-entity! conn {:tag/name "tag1"})
        item1   (new-entity! conn {:item/tag tag1})
        outfit1   (new-entity! conn {:outfit/item item1})]
    :ok))

如果我使用此devcard,我将无法获得任何结果:

(defcard find-by-tag-param
  "find items by tag"
  (d/q '[ :find ?item 
         :in ? ?tagname
         :where
         [ ?tag :tag/name ?tagname ]
         [ ?item :item/tag ?tag ]]
       @conn "tag1"))

为什么此查询不返回任何结果?

1 个答案:

答案 0 :(得分:3)

对于初学者,你的in子句应为int count; using ( var db = new SQLiteConnection( new SQLitePlatformWinRT(), DbPath ) ) { var results = db.Table<TickRecord>().ToList(); count = ( from p in results where (p.TickStartDate.LocalDateTime >= start && p.TickEndtDate.LocalDateTime <= end ) select (int)p.DurationInSeconds ).Sum(); } return count; ;你在那里的绑定没有默认数据库,这意味着没有任何东西会匹配你的查询子句。

:in $ ?tagname符号是一个特殊符号,可用作$表单中的默认数据库。您可以通过在:where子句前添加备用数据库的名称 - 符号(例如:where)来使用非默认数据库。

我没有使用开发卡,因此可能需要其他东西来实现这一点,但修复查询是第一步。