複数のWHERE条件を必要とするSELECT文を作成しようとしています。それは可能ですか?ここにシナリオがあります。私は次の構造のテーブルを持っています。WHERE条件が複数あるSELECT文
フォームID(タイプのInt)
SubmissionID(タイプのInt)
フィールド名(タイプ テキスト)
たFieldValue(タイプテキスト)
データはこのようなものになるだろう。 表名:SubmissionsValue
FormID - SubmissionID - FieldName - FieldValue 24 ------ 5 ---------- username ------ johnk 24 ------ 5 ---------- firstname ------ John 24 ------ 5 ---------- lastname ------ King 24 ------ 5 ---------- address ------ 100 some street 24 ------ 5 ---------- email ------ [email protected] 24 ------ 9 ---------- username ------ cathym 24 ------ 9 ---------- firstname ------ Catherine 24 ------ 9 ---------- lastname ------ Mirusia 24 ------ 9 ---------- address ------ 100 some other street 24 ------ 9 ---------- email ------ [email protected] 32 ------ 20 ---------- username ------ johnk 32 ------ 20 ---------- firstname ------ John 32 ------ 20 ---------- lastname ------ King 32 ------ 20 ---------- address ------ 100 some street 32 ------ 20 ---------- email ------ [email protected] 32 ------ 20 ---------- AdultTicket------ 5 32 ------ 20 ---------- SingleTicket------ 3 32 ------ 20 ---------- Total ------ $60.00
は、どうやらこれはエンティティ - 属性値(EAV)デザインで、私が言われています!
"FieldName"、 "FieldValue"などがわかるように、テーブルのフィールドの実際の名前です。また、同じユーザーの複数のフォームのエントリをテーブルに表示することもできます。だから私のキーフィールドは、ユーザーのemailIDと、フォームIDです。
フィールド名は、各オンラインフォームのfieldvalueとともにテーブルに格納されます。
"username"、 "firstname"、 "lastname"、 "address"、 "email"はフォームの実際のフィールドです。ユーザーが情報を送信すると、上記のようにテーブルに格納されます。
電子メールIDをキーフィールドとして使用して、別の領域にユーザーの詳細を表示したいとします。
は基本的にこの現象が発生しているものである(する$ user->は、電子メールは、現在のユーザーの電子メールを与える):
SELECT username WHERE (FieldName = "email") AND (FieldValue = " $user->email")
しかし、値「johnk」を取得するための現実にして「cathym 「私の例では、どのような私が、次のされなければならないようですが、私はそれをコーディングする方法がわからないです:
SELECT FieldValue WHERE (FieldName = "username")
(WHERE (FieldName = "email")
AND (FieldValue = " $user->email"))
誰かが、このスクリプトで私を助けてくださいことはできますか?
これはRSForm!Proを使用しているJoomlaサイト用です。 RSForm!Proはフォーム入力を上記の方法で保存します!!!
=== EDIT ====
明確化:上記に示しテーブルデータは、すべて一つのテーブルです。私は読みやすさのために2つのデータセットの間にスペースを追加しました。
FormIDとSubmissionIDは基本的に無視できます。バックエンドは、さまざまな異なるフォームのエントリをすべて1つのテーブルに保持するため、formIDとsubmissionIDを追跡します。最終的に、そのテーブルにはさまざまなformIDとsubmissionIDが存在することがわかります。
この例では、データは同じフォームから入力されましたが、2つの異なる提出物(5 & 8)が入力されました。これを解決するには、この場合には
、私は単純にログインしているユーザーの情報を新しいフォームのフィールドを自動入力します。
Last Name: John King
User Address: 100 Some Street
etc...
どのような電子メールIDですか?それは電子メールアドレスですか?あなたの質問を編集して、あなたの入力と希望する出力が何であるかを教えてください。間違った出力を見せているので、意図した結果が表示されます。 – Martin
そして、FormIdでは何が起こっているのですか?それは誰にとっても同じであることを意図していますか? – Martin
[こちらの回答](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)では、SQLインジェクションを回避する方法について説明します。質問についての質問:FieldValueがユーザーの電子メールでFieldNameがユーザー名か電子メールのいずれかである場合、テーブルからユーザー名を選択しますか? – Terminus