You are on page 1of 1

CREATE TABLE `ub` (

`user_id` INT(11) NOT NULL,


`book_id` VARCHAR(10) NOT NULL,
PRIMARY KEY (`user_id`,`book_id`),
UNIQUE KEY `book_id` (`book_id`,`user_id`)
) ENGINE=INNODB DEFAULT CHARSET=latin1;

INSERT INTO ub VALUES (1, 'A'), (1, 'B'), (1, 'C');


INSERT INTO ub VALUES (2, 'A'), (2, 'B'), (2, 'C'), (2,'D');
INSERT INTO ub VALUES (3, 'X'), (3, 'Y'), (3, 'C'), (3,'Z');
INSERT INTO ub VALUES (4, 'W'), (4, 'Q'), (4, 'C'), (4,'Z');

USE mahout;
DROP TABLE ub_rank;
CREATE TEMPORARY TABLE ub_rank AS

SELECT similar.user_id,COUNT(*) rank


FROM ub target
JOIN ub similar ON target.book_id= similar.book_id AND target.user_id !=
similar.user_id
WHERE target.user_id = 2
GROUP BY similar.user_id;

SELECT * FROM ub_rank;

USE mahout;
SELECT similar.book_id, SUM(ub_rank.rank) total_rank
FROM ub_rank
JOIN ub similar ON ub_rank.user_id = similar.user_id
LEFT JOIN ub target ON target.user_id =2 AND target.book_id = similar.book_id
WHERE target.book_id IS NULL
GROUP BY similar.book_id
ORDER BY total_rank DESC;

You might also like