2011-05-06 10 views
1

まず、これを行う良い方法があるかどうかは、おそらく外部キーを使って教えてください...私は一度読んだことがありますが、それらの使い方は分かりません。ヘルプMYSQLクエリを作成する

データを取得したいテーブルが2つあります。 AccountDetailsとAccountUsageの両方のテーブルには、各ユーザーに一致するAccountIDの一意のIDがあります。
AccountDetailsテーブルのAccountEmailとユーザーが帰属している値を比較し、一致するものがある場合は両方のテーブルのすべてのデータを取得し、AccountUsageのデータを更新する必要があります。私はAccountUsageのデータを更新するために別のクエリが必要かもしれないと思っていますが、別の方法がある場合にはそれを言いました。LastLoginを今日の日付に更新します。

だから、私は私と一緒にあなたのまだ願って、これは私が現時点で持っているコードは、そのすべての後

SELECT AccountID, AccountPassword, BandID FROM AccountDetails WHERE AccountEmail=? 

ある - キーポイントです。

  • 外国人IDの方が良い方法がありますか(実際にはこれが関連しているかどうかはわかりません)。

  • もしそうでなければ、私は質問に手伝ってもらえますか?参加が必要ですか?

  • LastLoginを今日のデータに自動更新する方法はありますか、別のクエリが必要ですか?


クリス

EDITどうもありがとうございます:これは私が(イムは、PHPのOOPするためにアプリケーションを変換する)最後の時間を使用し、いくつかのコードがあります。

SELECT AccountUsage.AccountID, AccountUsage.AccountActive FROM AccountUsage INNER JOIN AccountDetails ON AccountUsage.AccountID=AccountDetails.AccountID WHERE AccountDetails.AccountEmail=? 

これは、すでに最初のテーブルからデータを取得するために別のクエリを実行した後、idealy私は1つのクエリでそれをすべてをしたいと思いました。

PHPの場合、配列としての返り値の形式はいいでしょう。

+0

私はあなたが本当にSQLについて多くのことを読んで、次にいくつかのアプリケーションを作成すべきだと思います。 SQLを紹介するオンラインチュートリアルを入手してください。 – Marcin

+0

期待どおりの出力を加えてください。 –

+0

これはほぼすべてのmysqlチュートリアルでカバーされる非常に基本的な質問です。私はあなたのプロジェクトを続行する前にmysqlの使用法を読んでみたいと思うかもしれません。 – eykanal

答えて

1
  1. 電子メールに基づいてユーザーのデータを取得するには、JOINが必要です。 AccountIDに基づいてテーブルを結合します(両方のテーブルにPrimary Keyがあることを確認してください)ので、をWHERE節でテストします。 AccountEmail列にインデックスがあることを確認してください。そのため、すばやく表示されます。

    問合せ:私はAUとADとAccountUsageにAccountDetailsをエイリアスしている

    SELECT AD.AccountID, AD.AccountPassword, AD.BandID, AU.* 
    FROM AccountDetails AD 
    JOIN AccountUsage AU on AU.AccountID = AD.AccountID 
    WHERE AD.AccountEmail = ? 
    

    、これは表の列に簡単に曖昧さをなくすなりますので、あなたは完全なテーブル名にあなたが必要とするたびに入力する必要はありませんそれを参照してください。あなたが別のUPDATEクエリ

  2. 外部キーを実行する必要がLastLoginは本当にここに、あなたがデータを引き出す助けにはなりません更新する

  3. 。 Foreginキーは、データの整合性を維持するために構築されています。つまり、AccountUsageにAccountIDのForegin Key制約を設定すると、AccountDetailsにリンクされ、AccountDetailsの行に戻って参照しなかったAccountUsageに行を挿入することはできません。それはちょっと混乱するかもしれませんが、持ち帰りは - 実際にデータを引き出すためにここに必要なものではありません。これは、データとの整合性を維持するのに役立つ単なる構造上の機能です。

+0

ありがとう、完璧に動作します。あなたのコードを編集する場合は、2つ以上のテーブルに参加することが可能ですか? – Chris

+1

あなたが望むならば、100個のテーブルに参加することができます。参加したい各テーブルに対して 'JOIN

ON 'を追加して、 'SELECT'を編集して、必要な/ –