我迷失在这里,我甚至不知道如何最好地标题我的问题。
我正在创建一个简单的约会网站。我希望女性能够像所有其他约会网站一样阻止男性。发生这种情况时,我不希望在查询中返回女性的个人资料。
表A. 包含所有配置文件信息的成员表,包括成员名称 表B. 被封锁的成员表,其中包含该女子封锁男子的每个案件的女子姓名和男子姓名
所以,我想要这样的东西: $ query =返回表A中性别=女性的所有记录,表B中没有包含女性姓名和男性姓名的记录
我以为我会针对表B运行查询来检索所有阻止我的女性,然后针对表A运行查询以返回所有女性,其中女性的用户名未包含在我的第一个查询的结果中。但是,我无法弄清楚如何做到这一点。
答案 0 :(得分:2)
如果我理解你的问题...似乎是一个简单的加入,不是吗?不确定我是否误解了。也许是这样的事情:
SELECT * FROM Table1 WHERE Table1.ID NOT IN (SELECT BLOCK_ID FROM table2)
所以Table1
拥有女性的所有ID,Table2
拥有所有阻止ID(例如),你想要的不是那个?显然,需要进行一些更改。
答案 1 :(得分: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并查找空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列都有索引。
答案 2 :(得分: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子句将拒绝此记录,因为womans_name表B中的不会为空。如果表B不包含匹配的记录,那么所有这些字段都将为空(包括B.womans_name),因此满足Where子句。