请原谅我是否经常询问这个问题,但我在描述我的问题时遇到了麻烦,因此无法找到与Google有用的内容。
我想创建一个“配置文件匹配系统”,用户可以使用两个列表。一个列表是他们需要的事物列表,另一个列表是他们想要的事物列表。我希望我的网站能够根据互补需求来匹配人们,但我不确定最好的方法是什么。我在Perl中构建了站点,我使用MySQL作为我的数据库。我的第一个想法是,我需要一个预定的Perl脚本来查询数据库,然后将匹配输入数据库,以便在下次用户时提供给用户,但我想不出另一种方法,所以我我想我会看到互联网说的话。
感谢帮助人员&加尔斯, 迪伦
答案 0 :(得分:1)
您应该能够使用SQL Join获得所需内容。示例SQLite代码:
.headers on
.separator "\t"
create temporary table 'buyers' (
buyer integer primary key,
wants char(1)
);
insert into buyers(wants) values('a');
insert into buyers(wants) values('b');
insert into buyers(wants) values('c');
insert into buyers(wants) values('d');
insert into buyers(wants) values('e');
create temporary table 'sellers' (
seller integer primary key,
offers char(1)
);
insert into sellers(offers) values ('a');
insert into sellers(offers) values ('b');
insert into sellers(offers) values ('b');
insert into sellers(offers) values ('e');
select
buyers.buyer as buyer,
sellers.seller as seller,
buyers.wants as good
from
buyers left outer join sellers
on
buyers.wants = sellers.offers
;
输出:
buyer seller good 1 1 a 2 2 b 2 3 b 3 c 4 d 5 4 e
在Perl中做类似的事情:
#!/usr/bin/env perl
use strict;
use warnings;
use Graph::Undirected;
my $g = Graph::Undirected->new(unionfind => 1);
# buyers
$g->add_edge(b1 => 'a');
$g->add_edge(b2 => 'b');
$g->add_edge(b3 => 'c');
$g->add_edge(b4 => 'd');
$g->add_edge(b5 => 'e');
# sellers
$g->add_edge(s1 => 'a');
$g->add_edge(s2 => 'b');
$g->add_edge(s3 => 'b');
$g->add_edge(s4 => 'e');
use YAML;
print Dump [ $g->connected_components ];
输出:
- - a - b1 - s1 - - s2 - b - s3 - b2 - - b4 - d - - e - b5 - s4 - - b3 - c