У меня есть таблица для моих продуктов в Cassandra. В этой таблице я храню название продукта и имя продавца (могут быть тысячи продавцов) и оценку (оценка продукта продавца), как показано ниже.
CREATE TABLE products
(
product_name varchar,
seller_name varchar,
score int,
primary key (product_name, seller_name)
);
Мне нужно обновить счет в моем коде
UPDATE products SET score = 2 WHERE product_name = "iphone-7" AND seller_name = "jack" ;
Все хорошо, кроме Select Query:
SELECT * FROM products WHERE product_name = "iphone-7" ORDER BY SCORE DESC;
Мне нужно получить продукты по порядку оценок. Но, как вы знаете, невозможно отсортировать без оценки, являющейся первичным ключом.
Решение состоит в том, чтобы иметь две таблицы, соответствующие вашим требованиям. Например, вторая таблица может быть
CREATE TABLE products_score
(
product_name varchar,
score int,
primary key (product_name, score)
);
поэтому вы заполняете оба при написании и используете второй для упорядочения по счету
например: строка 1 -> имя_продукта: iphone7- имя_продавца: jack- оценка: 5 / строка 2 -> имя_продукта: iphone7- имя_продавца: Алекс - оценка: 2
затем вы добавляете имя продавца в индекс. первичный ключ (название_продукта, оценка, имя_продавца). там вы можете запросить так: выберите * из таблицы, где product_name = 'x' упорядочить по счету DESC, продавец_название DESC
Мне нужно иметь список продуктов с наивысшим баллом и их продавцов. Например, у мобильного товара могут быть тысячи продавцов, каждый продавец получил свой балл за этот товар.