3

私は 2 つの SQL テーブルを持っています。1 つはユーザー テーブル用で、もう 1 つはユーザーに関するすべてのものです。(年齢、性別など)

ユーザーテーブル:

id, username, mail, etc

2番目のテーブル

id, user_id, type_id, content

ユーザー テーブルの内容:

1, knife, knife@something.com, etc ...

2 番目のテーブル:

1, 1, 38 (age)
1, 3, Male

20 歳から 40 歳までの男性ユーザーを獲得したいと考えています。私は今ここにいます:

SELECT 
        *
FROM 
        felhasznalok_kieg_adat
        JOIN felhasznalok
                ON felhasznalok_kieg_adat.user_id = felhasznalok.id
WHERE 
   felhasznalok_kieg_adat.kieg_id = "22" 
   and felhasznalok_kieg_adat.tartalom < 21 
   and felhasznalok_kieg_adat.tartalom < 40

21 歳から 40 歳までの結果が表示されますが、その男性または女性のことをどのように追加できますか?

4

4 に答える 4

2

年齢フィルターに 1 回、性別フィルターに 2 回参加する必要があります。

SELECT User.*
FROM User
    JOIN UserContent ageFilter
        ON ageFilter.user_id = User.id
        AND ageFilter.type_id = 1  -- use type_id for joining
    JOIN UserContent genderFilter
        ON genderFilter.user_id = User.id
        AND genderFilter.type_id = 3
WHERE (ageFilter.content < 21 AND ageFilter.content < 40) -- what type is content? You have to make some sort of conversion here!
AND (genderFilter.content = 'Male')

テーブルと列の名前を、質問で説明したものに置き換えました。
結合にを追加するtype_idと、このように読みやすくなります。

于 2013-04-22T12:48:14.680 に答える
0

可能であれば、性別列がない場合は、テーブルに追加する必要があります

結合で > と < の代わりにBETWEENを使用 でき、テーブルを次のように結合できます。

SELECT *
FROM table1
JOIN table2
ON table1.user_id = table2.id
WHERE ((table1.kieg_id = "22" and table1.tartalom BETWEEN 21 AND 22))


AND table1.gender = 'male'
于 2013-04-22T12:52:15.093 に答える
0
SELECT *
  FROM felhasznalok_kieg_adat
  JOIN felhasznalok ON felhasznalok_kieg_adat.user_id = felhasznalok.id
 WHERE ((felhasznalok_kieg_adat.kieg_id = "22" 
        AND felhasznalok_kieg_adat.tartalom < 21 
        AND felhasznalok_kieg_adat.tartalom < 40))
   AND felhasznalok_kieg_adat.gender = 'male'
于 2013-04-22T12:44:30.267 に答える
0

男性は「M」、女性は「F」などの値を選択します。それで:

ALTER TABLE felhasznalok_kieg_adat ADD COLUMN sex CHAR(1);

男性のみの選択は次のようになります。

SELECT *
FROM felhasznalok_kieg_adat
JOIN felhasznalok
ON felhasznalok_kieg_adat.user_id = felhasznalok.id
WHERE ((felhasznalok_kieg_adat.kieg_id = "22" and felhasznalok_kieg_adat.tartalom < 21 and felhasznalok_kieg_adat.tartalom < 40)) and (sex = 'M')
于 2013-04-22T12:47:07.540 に答える