2010-11-29 10 views
1

私はInsurance Quotingシステムを構築しており、質問する質問がいくつかあります。私の質問は1つのテーブル(questionsTable)に保存され、回答は回答テーブル(answersTable)に格納され、質問/回答アクション(つまり、引用を参照するか別の質問を促すか)は、actionsテーブル(actionsTable) 。WHERE句でMySQLのフィールド値を使用することはできますか?

ここではいくつかのサンプルデータ

questionsTable

questionId | questionDescription 
    1   | What percentage of the roof is flat? 
    2   | Please provide details of the roof construction: 
    3   | How many rooms does the building have? 

answersTable

answerId | questionId | answerValue 
    1  | 1   | < 50% 
    2  | 1   | > 50% 
    3  | 2   | freeForm 
    4  | 3   | 1 
    5  | 3   | 2 
    6  | 3   | 3 
    7  | 3   | 3+ 

actionsTable

actionId | answerId | action 
    1  | 2  | 2 
    2  | 6  | refer 
    3  | 7  | decline 

テーブルのリンクはこれです方法: 各質問には回答があり、データベースから選択できる特定の回答には特定の行動が含まれています - 別の質問をしたり、引用を拒否したりします。彼らが別の質問をする場合、質問のIDはアクションフィールドに格納されます。

基本的に、質問に「> 50%」と答えた場合1「屋根の何パーセントが平らですか?」あなたは答えに質問2を与えられます。

私の質問は、 'questionsTable'のすべての質問を選択するにはどうすればいいのですか?IDは 'actionsTable'の 'action'値のいずれとも等しくないので、 'top-level'セット?

私はこれの設計、別の質問に

'SELECT questionDescription FROM questionsTable
WHERE questionsTable.questionId != 'this' AND questionsTable.questionId != 'this', etc

を選択するために、私は「actionsTable」からすべての数値を選択するために、2つのMySQLのクエリ、1を使用して簡単にPHPでこれを行うことができます知っていますデータベースは正規化されるが、動的である管理チームは、管理ページを使用して、質問、回答、およびアクションを追加/削除することができます。

答えて

2
SELECT questionDescription FROM questionsTable 
LEFT JOIN actionsTable ON questionsTable.questionId=actionsTable.action 
WHERE actionsTable.action IS NULL 

これはquestionsTable内のすべての値を保持し、かつ唯一のアクションフィールドにactionsTableで一致するものがないものを示し、2合流します。

+0

あなたは絶対的な伝説です。 – Sjwdavies

+0

ご迷惑をおかけして申し訳ありませんが、もっと詳しく説明できますか? – Sjwdavies

+1

LEFT JOINには、「左」(最初の)テーブルのすべての行が何であっても保持されます。これらの行が存在する場合、それらは他のテーブルの一致する行と結合されます。そうでなければ、それらのフィールドはNULLです(正確にはあなたが探しているもの) –

関連する問題