(PostgreSQL)
Je ne discuterai pas avec votre décision d'élever la religion et de la politique au-dessus des intérêts ordinaires. (Cela ne signifie pas qu'il est une bonne idée,., Cela signifie simplement que je ne discuterai pas avec vous à ce sujet)
create table users (
user_id integer primary key,
email_addr varchar(35) not null,
current_religion varchar(35) not null default 'None',
current_politics varchar(35) not null default 'None'
);
insert into users values
(1, '[email protected]', 'Muslim', 'Liberal'),
(2, '[email protected]', 'Muslim', 'Conservative'),
(3, '[email protected]', 'Christian', 'Liberal');
create table interests (
user_id integer not null references users (user_id),
user_interest varchar(20) not null,
primary key (user_id, user_interest));
insert into interests values
(1, 'Walks on the beach'),
(1, 'Women'),
(1, 'Polar bears'),
(2, 'Walks on the beach'),
(2, 'Women'),
(2, 'Little Big Man'),
(3, 'Running on the beach'),
(3, 'Coffee'),
(3, 'Polar bears');
-- Given one user id (1), find a different user with at least
-- one matching interest. You can do this without referring
-- to the users table at all.
select t1.user_id, t1.user_interest, t2.user_id
from interests t1
inner join interests t2 on (t2.user_interest = t1.user_interest)
where t1.user_id = 1 and t2.user_id <> 1;
Retours
1 Walks on the beach 2
1 Women 2
1 Polar bears 3
Pour correspondre aussi, par exemple, la religion, vous peut faire essentiellement la même chose avec la table "utilisateurs".
select t1.user_id, t1.current_religion as interest, t2.user_id
from users t1
inner join users t2 on (t1.current_religion = t2.current_religion)
where t1.user_id = 1 and t2.user_id <> 1
Retours
1 Muslim 2
Vous pouvez exploiter la structure similaire à apporter intérêts religieux et les intérêts ordinaires ensemble à l'aide de l'Union.
select t1.user_id, t1.current_religion as interest, t2.user_id
from users t1
inner join users t2 on (t1.current_religion = t2.current_religion)
where t1.user_id = 1 and t2.user_id <> 1
union
select t1.*, t2.user_id
from interests t1
inner join interests t2 on (t2.user_interest = t1.user_interest)
where t1.user_id = 1 and t2.user_id <> 1;
Retours
1 Walks on the beach 2
1 Women 2
1 Polar bears 3
1 Muslim 2
c'est peut-être hors de votre contrôle, mais pourquoi ne pas y compris la religion et la politique dans le tableau des intérêts? En outre, les requêtes seraient légèrement plus simples de cette façon. – AJJ
Hey AJweb - Je suis toujours en train d'envisager de le faire en fait. –