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 があり、すべてのブロック ID (たとえばTable2) があり、そこにないものが必要ですか? 明らかに、これに加えていくつかの変更が必要です。

于 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 列と locked_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 のすべてのフィールドを含む 1 つのレコードが結合によって作成されます、テーブル Bの womans_name が null にならないため、Where 句はこのレコードを拒否します。テーブル B に一致するレコードが含まれていない場合、これらのフィールドはすべて null (B.womans_name を含む) になるため、Where 句は満たされます。

于 2012-06-19T18:00:34.143 に答える