0

私は自分のテーブルにまっすぐ飛び込みます、そしてそれは私の質問がすぐに明白になります

表1:

Owner    ownerID    Name    Address    userID
______________________________________________
Name        1       Tim    "top road"    1   

表2:

User      userID    userName    password    secretQA1    secretQA2
___________________________________________________________________
            1        BigTim       pwhat         7           8

表3:

secretQA  id    question       answer
_______________________________________
          7     "Mums name"     "Tony"
          8     "Fav sport"     "dressing up"

とにかく私がやりたいのは、ownerIDが1であることを知っていて、所有者にすべての情報を提供したいということです。だから私がやっていたことはこのようなものです:

SELECT secretQA.question AS Question1, secretQA.answer AS Answer1,
secretQA.question AS Question2, secretQA.answer AS Answer2,
User.password AS Password
FROM secretQA, owner, User
WHERE owner.id = 1
AND SecretQA.id = owner.secretQA1
AND SecretQA.id = owner.secretQA2
AND user.id = owner.userID; 

しかし、役に立たない!

これは私が取得したいものです:

Question1    Answer1    Question2    Answer2        Password
____________________________________________________________
"Mums name"   "Tony"    "Fav sport"  "dressing up"  pwhat  

今後ともよろしくお願いいたします

編集:パスワードはここでの単なる例であり、私の実際のバージョンではプレーンテキストではありませんこれは私が何をしているのかについての単純化された質問です

4

3 に答える 3

1

必要なものを取得するには、SecretQAテーブルに2回参加する必要があります。これは、明示的な結合構文を使用する方がよい理由の例です。

これはうまくいくはずです

     SELECT q1.question AS Question1, 
            q1.answer AS Answer1,
            q2.question AS Question2,
            q2.answer AS Answer2,
            u.password AS Password
       FROM User u
       JOIN owner o ON u.id = o.userID
  LEFT JOIN secretQA q1 on o.secretQA1 = q1.id
  LEFT JOIN secretQA q2 on o.secretQA2 = q2.id
      WHERE owner.id = 1

secretQAテーブルは結合に2回参加する必要があることに注意してください。私はそれにエイリアスq1を与え、q2これを機能させるために。

ああ、そして他の人が言っているように、パスワードをプレーンテキストとして保存している場合は、ティーヒ。intertubzはu、srslyをpwnします。

于 2012-08-31T16:39:27.007 に答える
0

表2で、「secret1」列と「secret2」列を削除します。表3に、新しい列「userID」を追加します。

その後、あなたは次のようなことをすることができるはずです

select u.username, u.password, s.question, s.answer
from table1 as o join table2 as u on o.userid = u.userid
join table3 as s on s.userid = o.userid
where o.ownerid = 1

また、他の人が指摘しているように、パスワードをプレーンテキストとして保存することはお勧めできません。

于 2012-08-31T16:38:50.643 に答える
0

これを試して

 SELECT q1.question, q1.answer, q2.question, q2.answer, u.password
   FROM user u
   JOIN secretqa q1 ON u.secretQA1 = q1.id
   JOIN secretqa q2 ON u.secretQA2 = q2.id
  WHERE u.id = ?
于 2012-08-31T16:39:45.220 に答える