【发布时间】:2014-08-30 09:16:30
【问题描述】:
我创建了一个表帖子。当我提出请求时选择:
return $this->db->query('SELECT * FROM "posts" WHERE "id" IN(:id) LIMIT '.$this->limit_per_page, ['id' => $id]);
我得到错误:
PRIMARY KEY 列“id”不能被限制(前一列 “post_at”要么不受限制,要么不受非 EQ 关系的限制)
我的表转储是:
CREATE TABLE posts (
id uuid,
post_at timestamp,
user_id bigint,
name text,
category set<text>,
link varchar,
image set<varchar>,
video set<varchar>,
content map<text, text>,
private boolean,
PRIMARY KEY (user_id,post_at,id)
)
WITH CLUSTERING ORDER BY (post_at DESC);
我阅读了一些关于主键和集群键的文章,并理解,当有一些主键时 - 我需要使用运算符 = 和 IN。就我而言,我不能使用一个主键。您建议我更改表结构,该错误会消失吗?
【问题讨论】:
-
只需尝试在主键中交换 user_id 和 id,也可以使用 = 运算符添加一个具有您知道的值的列,例如值为 1 的clom1
-
没有我知道值的clom1,所有内容都不一样,我可以创建额外的clom1并添加每行总是值1?
-
是的,您必须创建一个可以使用的具有固定值的列
-
我改变你的建议:现在有一个查询:
return $this->db->query('SELECT * FROM "posts" WHERE "index_field" = :index AND "id" IN(:id) LIMIT '.$this->limit_per_page, ['id' => $id, 'index' => 1]);Get error: 'Syntax_error: line 1:45 no viable alternative at input 'index' -
拜托,你能给我更多的例子吗?谢谢
标签: cassandra cassandra-2.0 cassandra-cli