我试图找出如何通过用户名来检索两条用户记录的查询,只要它们一起有“双重配置文件”。
我的表格如下:
doubles =>
id
user_1
user_2
profile_text
users =>
id
username
url_username
birthdate
and so on
说我在双打表中有这个记录:
id user_1 user_2 profile_text
5 14 16 Welcome to our profile
假设我在用户表中有这两条记录(包括许多其他记录):
id username url_username birthdate
14 John john 1990-05-09
16 Bob bob 1991-07-04
当用户访问www.mysite.com/double/john/bob时,我想要检索2个用户,但前提是他们在双打表中有记录(不关心他们的ID是在user_1还是user_2) 。 url_username是在url中输入的内容(此列的原因是我有替换为url的丹麦字母),并且我从url中检索此内容。
这甚至可能吗?
编辑: 如果改变表格结构可以使它更有效率,我很擅长。
答案 0 :(得分:1)
我没有构建你的表来测试它,但我认为这个查询应该有效:
select * from users, doubles where (doubles.user_1 = users.id or doubles.user_2 = users.id) and users.url_username = 'THEUSERNAME';
我在where子句中使用了url_username,假设你已经有了解析url的方法。我会说最好使用一个实际的用户ID。
好的,这是一个使用连接的查询,我认为可以实现你想要的。 (连接比子查询更快,如果可能,首选。)
至于速度有多快,你必须对其进行测试,这显然取决于你正在查看的记录数量。请注意,此查询没有做任何事情来保护您免受sql注入。 (我只是使用你在网址中提供的内容,但在将其传递到数据库之前,你需要确保它是安全的。)
select
d.*
from
users u1,
doubles d,
users u2
where
(
(d.user_1 = u1.id and d.user_2 = u2.id)
or
(d.user_1 = u2.id and d.user_2 = u1.id)
)
and
(u1.url_username = 'john' and u2.url_username='bob');
如果你想玩它,我在这里做了一个sql小提琴,或检查我的数据库是否正确。
http://sqlfiddle.com/#!2/a5acc/12