1

请原谅我问这个问题是否经常被问到,但我在描述我的问题时遇到了麻烦,因此无法找到对 Google 有用的东西。

我想创建一个“配置文件匹配系统”,用户有两个列表。一个列表是他们需要的东西的列表,另一个是他们想要的东西的列表。我想让我的网站根据互补需求匹配人们,但我不确定最好的方法是什么。我已经在 Perl 中构建了站点,并使用 MySQL 作为我的数据库。我的第一个想法是,我需要一个预定的 Perl 脚本来查询数据库并将匹配项输入回数据库,以便在用户下次使用时提供给用户,但我想不出另一种方法来做到这一点,所以我我想看看互联网上说了什么。

谢谢你们的帮助,迪伦

4

1 回答 1

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
;

输出:

买家卖家好
1 1个
2 2 乙
2 3 乙
3℃
4天
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 ];

输出:

-
  - 一个
  - b1
  - s1
-
  - s2
  - b
  - s3
  - b2
-
  - b4
  -d
-
  -e
  - b5
  - s4
-
  - b3
  - C
于 2013-03-22T17:58:51.737 回答