Каков правильный способ реализации системы периодического сопоставления для базы данных MySQL?

Простите меня за вопрос, если это часто задают, но у меня возникли проблемы с описанием моей проблемы, и поэтому я не могу найти что-то полезное в Google.

Я хотел бы создать «систему сопоставления профилей», в которой у пользователей есть два списка. Один список — это список вещей, которые им нужны, а другой — список вещей, которые они хотят. Я хотел бы, чтобы мой веб-сайт подбирал людей на основе дополнительных потребностей, но я не уверен, как лучше всего это сделать. Я создал сайт на Perl и использую MySQL для своей базы данных. Моя первая мысль заключалась в том, что мне понадобится запланированный Perl-скрипт для запроса к БД и ввода совпадений обратно в БД для обслуживания пользователей в следующий раз, когда они будут включены, но я не могу придумать другого способа сделать это, поэтому я подумал, что посмотрю, что сказал интернет.

Спасибо за помощь, ребята и девушки, Дилан


person Dylan    schedule 22.03.2013    source источник


Ответы (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
;

Вывод:

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
person Sinan Ünür    schedule 22.03.2013
comment
Эй, спасибо за подробный ответ! :) Можете ли вы придумать какой-нибудь другой способ сделать это? Как вы думаете, это лучший способ создать эту функциональность? - person Dylan; 22.03.2013
comment
Я предпочел бы решение для базы данных, чем передача данных между сценарием Perl и базой данных. Я недостаточно знаю SQL, чтобы понять, является ли то, что я предложил, лучшим в какой-либо форме. - person Sinan Ünür; 22.03.2013