1

これが頻繁に尋ねられるかどうか尋ねることを許してください、しかし私は私の問題を説明するのに苦労していて、それ故にグーグルで何か役に立つものを見つけるのに苦労しています。

ユーザーが2つのリストを持つ「プロファイルマッチングシステム」を作りたい。1つのリストは彼らが必要とするもののリストであり、もう1つは彼らが望むもののリストです。私のウェブサイトを補完的なニーズに基づいて人々と一致させたいのですが、それを実現するための最善の方法がわかりません。私はPerlでサイトを構築し、データベースにMySQLを使用しています。私の最初の考えは、DBにクエリを実行し、次にユーザーがオンになっているときにユーザーに提供するためにDBに一致を入力するために、スケジュールされたPerlスクリプトが必要だと考えましたが、それを行う別の方法を考えることはできません。私はインターネットが言ったことを見るだろうと思った。

助けてくれてありがとう、ディラン

4

1 に答える 1

1

SQL結合を使用すると、必要な処理を実行できるはずです。サンプル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 a
2 2 b
2 3 b
3 c
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 ];

出力:

-
  -a
  -b1
  -s1
-
  -s2
  -b
  -s3
  -b2
-
  -b4
  -d
-
  -e
  -b5
  -s4
-
  -b3
  -c
于 2013-03-22T17:58:51.737 に答える