SQL - запрос по динамическим весам - PullRequest
1 голос
/ 07 апреля 2011

У меня есть база данных с пользователями, у которых есть список предметов.
Простой дизайн:

Пользователи:

UserStuff | Идентификатор_пользователя

ItemsList:

itemID | Идентификатор_пользователя

У каждого пользователя есть список предметов. Элемент может принадлежать многим пользователям (один и тот же itemID, другой userID).

Теперь я хочу динамически назначать веса элементам (вычисляемым во время выполнения, а не что-то постоянное, которое можно сохранить в базе данных), а затем выбирать пользователей с наибольшим весом в соответствии с их элементами.

Могу ли я определить вес элементов в запросе SQL, а затем выполнить расчет?

Я стараюсь избегать циклического прохождения базы данных и расчета весов пользователей.

Edit:

пример:

UserStuff | Идентификатор_пользователь
бла1 | 1
бла2 | 2

itemID | Идентификатор_пользователь
1 | 1
1 | 2
2 | 1
3 | 1
4 | 2
5 | 1

wieghts:
itemId = 1 = 15 itemID = 2 = 10

UserID1 общий вес = 25
UserID2 общий вес = 10

1 Ответ

4 голосов
/ 07 апреля 2011

Создайте временную таблицу весов с вашими динамическими значениями:

CREATE TEMPORARY TABLE weights(item_id integer, weight integer);
CREATE TABLE
INSERT INTO weights VALUES (1, 10);  -- Inserting weights
INSERT 0 1
INSERT INTO weights VALUES (2, 1);   -- Inserting weights
INSERT 0 1
...

Создание представления для сопоставления элементов весам:

CREATE TEMPORARY VIEW items_weights AS 
       SELECT il.itemID, il.UserID, w.weight FROM
              ItemsList il JOIN weights w 
              ON il.itemID=w.item_id;

Выберите наиболее взвешенных пользователей:

SELECT UserId, COUNT(weight) FROM items_weights
       GROUP BY UserId ORDER BY COUNT(weight) DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...