对于约会应用程序,用户必须设置描述他/她的白旗.他/她(我不包括示例数据中的性别)然后可以 Select 几个绿旗和红旗,它们具有优先级,用于寻找潜在的伴侣.优先级用于对白色、绿色和红色旗帜进行优先排序.数字越小,意味着越重要.
- A是素食主义者,喜欢狗,但讨厌cat .
- B是素食主义者,喜欢狗.
- C和B是一样的,但比起素食者,C更喜欢狗.
- D是素食主义者,喜欢狗和cat .
是否存在以排序方式返回A的最佳匹配项的SQL查询?
想要的结果:[B,C]
有没有办法对此进行微调,使用B、C和D的绿旗和红旗来更好地优化结果?
CREATE TABLE users (
id serial PRIMARY KEY,
name varchar(255)
);
CREATE TABLE flags (
id serial PRIMARY KEY,
name varchar(255)
);
CREATE TABLE userflags (
id serial PRIMARY KEY,
user_id integer REFERENCES users (id),
color varchar(255),
flag_id integer REFERENCES flags (id),
priority integer
);
INSERT INTO users (name) VALUES ('A'),('B'),('C'),('D');
INSERT INTO flags (name) VALUES
('Vegetarian'),('Vegan'),('Dog owner'),('Cat owner');
INSERT INTO userflags (user_id, color, flag_id, priority) VALUES
(1,'white',1,1)
,(1,'white',3,2)
,(1,'green',1,1)
,(1,'green',3,2)
,(1,'red', 4,1)
,(2,'white',1,1)
,(2,'white',3,2)
,(2,'green',1,1)
,(2,'green',3,2)
,(3,'white',1,2)
,(3,'white',3,1)
,(3,'green',1,1)
,(3,'red', 3,1)
,(4,'white',1,1)
,(4,'white',3,2)
,(4,'white',4,3);