获得的结果与表中添加的顺序相同

时间:2015-06-11 03:31:07

标签: cassandra cql

我有这张桌子

<a href="http://Blackboard.mccneb.edu">Blackboard Course Web Site</a>

这是我的数据

CREATE TABLE tag_by_user (
userId uuid,
tagId uuid,
colId timeuuid,
tagLabel text,
PRIMARY KEY (userId, tagId,colId)
);

现在我希望得到给定用户的标签与添加到行中的顺序相同(即按照添加时间的升序顺序,此处一个是insert into tag_by_user(userId,tagId,colId,tagLabel) values(4978f728-0f96-11e5-a6c0-1697f925ec7b ,b0b328fa-0f96-11e5-a6c0-1697f925ec7b,now(),'html'); insert into tag_by_user(userId,tagId,colId,tagLabel) values(4978f728-0f96-11e5-a6c0-1697f925ec7b ,b0b330d4-0f96-11e5-a6c0-1697f925ec7b,now(),'java'); insert into tag_by_user(userId,tagId,colId,tagLabel) values(4978f728-0f96-11e5-a6c0-1697f925ec7b ,c0f22450-0f96-11e5-a6c0-1697f925ec7b,now(),'javascript'); insert into tag_by_user(userId,tagId,colId,tagLabel) values(4978f728-0f96-11e5-a6c0-1697f925ec7b ,c0f226b2-0f96-11e5-a6c0-1697f925ec7b,now(),'scala pro'); insert into tag_by_user(userId,tagId,colId,tagLabel) values(4978f728-0f96-11e5-a6c0-1697f925ec7b ,c0f22ab8-0f96-11e5-a6c0-1697f925ec7b,now(),'c++');

colId

它给出了这个错误

cqlsh:ks_demo> select taglabel from tag_by_user where userid= 77c4d46c-0f96-11e5-a6c0-1697f925ec7b  order by colid;

我将在架构或查询Bad Request: Order by currently only support the ordering of columns following their declared order in the PRIMARY KEY

中进行哪些更改

2 个答案:

答案 0 :(得分:1)

您只需要在PRIMARY KEY中留下userId和colId:

CREATE TABLE tag_by_user (
userId uuid,
colId timeuuid,
tagId uuid,
tagLabel text,
PRIMARY KEY (userId, colId)
);

然后使用

SELECT * FROM tag_by_user WHERE userId={yourUserId}

以升序的顺序获取给定用户的标签。

如果您需要避免重复标记,那么您可以在tagId上创建索引并使用它来查明给定用户是否已存在标记并对其进行处理。虽然插入数据后无法修改colId

答案 1 :(得分:1)

如消息所示,要使用order by,您应遵循与PRIMARY KEY中相同的顺序。

CREATE TABLE tag_by_user (
    userid uuid,
    colid timeuuid,
    tagid uuid,
    taglabel text,
    PRIMARY KEY (userid, colid, tagid)
);

select taglabel from tag_by_user where userid = 4978f728-0f96-11e5-a6c0-1697f925ec7b  order by colid;

 taglabel
------------
       html
       java
 javascript
  scala pro
        c++