-1

この件に関してはたくさんの質問があることは知っていますが、私にはあまり理解されていない直接的な答えのように見えるので、私には意味がありません。

これが私がやりたいことです:

私は3つのテーブルを持っています:fusers、、。それらはすべて次の行を含みます。tuserslusersemail

3つのテーブルを組み合わせて、ユーザーが送信した変数$emailがすでにemail行に存在するかどうかを確認したいと思います。

内部結合と場合によってはすべての結合を使用しても機能することはわかっていますが、私の人生では、そこから学ぶことができる適切なチュートリアルや例を見つけることができません。

誰?

4

3 に答える 3

1
SELECT some_primary_id as id, 'fusers' as table_name FROM fusers WHERE email = '$email' UNION 
SELECT some_other_primary_id as id, 'tusers' as table_name FROM tusers WHERE email = '$email' UNION
SELECT some_misc_primary_id as id, 'lusers' as table_name FROM lusers WHERE email = '$email'

fusers_id as idユニオンセレクトのすべての列が同じ名前である必要があるため、を使用したことに注意してください

@njkのおかげで、重複する行をチェックして削除するだけUNION ALLなので、より高速に使用できます。UNION

構文:

(SELECT a as COMMON_COLUMN_1, b as COMMON_COLUMN_2, c as COMMON_COLUMN3 FROM xxx WHERE ...)
UNION
(SELECT d as COMMON_COLUMN_1, e as COMMON_COLUMN_2, f as COMMON_COLUMN3 FROM yyy WHERE ...)
UNION
(SELECT g as COMMON_COLUMN_1, h as COMMON_COLUMN_2, i as COMMON_COLUMN3 FROM zzz WHERE ...)
# where a,b,c are columns from table xxx ONLY
# where d,e,f are columns from table yyy ONLY
# where g,h,j are columns from table zzz ONLY

単にUNION、複数のSELECTステートメントの結果を1つの結果セットに結合するために使用されます。

于 2013-01-27T21:04:08.393 に答える
0

次のようなものを試してください。

select if(count(*) > 0, 1, 0) as exists from fusers f, tusers t, lusers l where f.email = "$email" or t.email = "$email" or l.email = "$email";
于 2013-01-27T21:07:32.417 に答える
0

私は3つのテーブルを持っています:フューザー、チューザー、ルーサー。それらはすべて次の行を含みます:email

3つのテーブルを組み合わせて、ユーザーが送信した変数$emailが電子メールの行にすでに存在するかどうかを調べます。

共通のフィールドを持つユーザーを説明する3つのテーブルがありますか?次に、(いつものように)答えはデータを正規化することです。すべての共通データは単一のテーブルにある必要があります。

于 2013-01-27T21:24:11.377 に答える