1

我在这里迷路了,我什至不知道如何最好地为我的问题命名。

我正在创建一个简单的约会网站。我希望女性能够像所有其他约会网站一样阻止男性。发生这种情况时,我不希望在查询中返回女性的个人资料。

表 A 包含所有个人资料信息的成员表,包括成员名称 表 B 被阻止的成员表,其中包含女人的名字和男人的名字,在每个案例中女人阻止了一个男人

所以,我想要这样的东西: $query = 从表 A 中返回所有记录,其中性别 = 女性,并且表 B 中没有包含女性姓名和男性姓名的记录

我想我会对表 B 运行查询以检索所有阻止我的女性,然后对表 A 运行查询以返回我的第一个查询结果中不包含该女性用户名的所有女性。但是,我无法弄清楚如何做到这一点。

4

3 回答 3

2

如果我理解你的问题......似乎是一个简单的加入,不是吗?不知道我是不是误会了。可能是这样的:

SELECT * FROM Table1 WHERE Table1.ID NOT IN (SELECT BLOCK_ID FROM table2)

Table1女性的所有 ID 也是如此,并且Table2具有所有块 ID(例如)并且您想要其中没有的内容?显然,除此之外还需要进行一些更改。

于 2012-06-19T17:48:25.373 回答
0

如果您想查看阻止当前用户的所有女性成员的列表,您可以使用如下查询:

SELECT member.*
FROM TableA member
JOIN TableB blocked ON (member.name = blocked.user_who_blocked)
WHERE member.sex = female
    AND blocked.blocked_user_name = 'Joe McCurrentUser'
;

因此,如果您想查看不是这种情况的用户集,您可以使用 LEFT JOIN 并查找 null id。

SELECT member.*
FROM TableA member
LEFT JOIN TableB blocked ON (member.name = blocked.user_who_blocked)
WHERE member.sex = female
    AND blocked.blocked_user_name = 'Joe McCurrentUser'
    AND blocked.id IS NULL
;

您可以根据需要修改表中的实际列。确保您在该表中的 user_who_blocked 和 blocked_user_name 列上都有索引。

于 2012-06-19T17:57:32.633 回答
0

这行得通吗?

Select * from Table A
inner join Table B on a.womans_name = B.womans_name and B.mans_name="Mans Name"
where B.womans_name IS NULL

如果表 B 包含一条与 womans_name 和 mans_name 匹配的记录,则连接将创建一条记录,其中包含表 A 和表 B 中的所有字段,Where 子句将拒绝该记录,因为表 B 中的 womans_name 不会为空。如果表 B 不包含匹配记录,则所有这些字段都将为空(包括 B.womans_name),因此满足 Where 子句。

于 2012-06-19T18:00:34.143 回答