2015-06-11 2 views
1

У меня есть эта таблицаполучать результат в том же порядке, что было добавлено в таблице

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 

Какие изменения я буду иметь в схеме или в запросе cqlsh 4.1.1 | Cassandra 2.0.8

ответ

1

Вам нужно оставить только USERID и colId в PRIMARY KEY:

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

будет эта схема может ответить 'выбрать * из tag_by_user, где идентификатор пользователя = 123 и TagID = xyz' – manish

+0

@Manish Да, вам нужно создать индекс на' tagId' для этого. Да. – Simha

1

Как следует из сообщения, для использования порядка вы должны следовать тому же порядку, что и в ПЕРВИЧНОМ КЛЮЧЕ.

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++ 
+0

эта схема сможет ответить 'select * from tag_by_user, где userId = 123 и tagId = xyz' – manish

+0

нет, для этого вам нужно создать другую таблицу с PRIMARY KEY (userid, tagid) –

+0

в основном я хочу проверить дублирование тега перед вставкой. так что в той же схеме это возможно? – manish

Смежные вопросы