2016-11-04 5 views
2

複雑なmysqlクエリを構築する必要があります。 id、id_user、id_campo、valoreの3つのカラムを持つユーザ情報を持つテーブルがあります。したがって、たとえば:複数の場所でMySqlクエリを構築する

  • ,1,1,1、 "id = 1"はユーザ名です。
  • 2,2,1、 "Luca";
  • 3,1,2、 "Windows"; (ここで、id_campo = 2は中古OS用です)。
  • 4,2,2、 "Linux"; など。

は今、私は、ユーザーを選択する必要がありますここで、name = "ロベルト" とOS =の "Linux" が、同じユーザー:

SELECT id_user WHERE (id_campo=1 AND valore="Roberto") OR (id_campo=2 AND valore="Linux"). 

このサンプルの場合には、問合せの戻りid_user = 1 id_user = 2でも結果は得られません。どのように私は条件 "同じユーザー"を含めることができるようにクエリを変更することができますか?

ありがとうございます!

+2

に基づいて、同じテーブルに参加しますか?これは、リレーショナルデータベース/テーブルがどのように動作するはずではありません。異なるデータに対して同じ列を使用する複数の関係を利用することはありません。なぜ 'id_user'にマッチする行を取得できないのですか? – junkfoodjunkie

+1

なぜ 'FROM'演算子が欠落していますか? – RomanPerekhrest

+0

なぜ間違っていますか?私はusersテーブル、 "campo"テーブル、 "user_spec"テーブルを持っています。したがって、ユーザーは "campo"( "Name"、 "OS"、 "email"、...)に含まれる異なるuser_spec値( "Roberto"、 "Luca"、 "Windows"、 "Linux" ..)。それが間違っている場合、どのようにDB構造を最適な方法で変更できますか?ありがとう – cent89

答えて

1

2つの「サブクエリ」を作成し、それらをユーザーIDで結合する必要があります。あなたは間違ったデシベルのデザインを持っていますが、とにかくあなたが内部をusieでき

SELECT a.id_user 
from (
    SELECT id_user FROM table 
    WHERE (id_campo=1 AND valore="Roberto") 
) a, 
(
    SELECT id_user FROM table 
    WHERE (id_campo=2 AND valore="Linux") 
) b 
WHERE a.is_user = b.id_user 
1

データベース-建設は右、間違っていることを知っているid_user

select a.id_user, a.id_campo, a.valore 
    from my_table as a 
    inner join my_table as b on .id_user = b-id_user 
    where (a.id_campo = 1 and a.valore ='Roberto') 
    AND (b.id_campo = 2 and b.valore ='Linux') 
関連する問題