2010-11-29 4 views
1

Я строю систему страхования по страхованию и задаю несколько вопросов. Мои вопросы хранятся в одной таблице (questionTable), мои ответы хранятся в таблице ответов (answerTable), а действие вопроса/ответа (то есть, ссылаться на цитату или задавать другой вопрос) сохраняется в таблице действий (actionTable) ,Можно ли использовать значение поля MySQL в предложении WHERE?

Вот некоторые выборочные данные

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 

Путь ссылку таблицы заключается в следующем: Каждый вопрос имеет ответы, выбираемые из базы данных, определенные ответы несут определенные действия - задайте другой вопрос или отклоните цитату. Если они задают другой вопрос, идентификатор вопроса сохраняется в поле действия.

Так что, если вы ответите '> 50%' на вопрос 1 'Какой процент крыши плоский?' вы получите ответ на вопрос 2.

Мой вопрос в том, как я могу выбрать все вопросы из «questionsTable». ГДЕ ИД не равен ни одному из значений «действия» из «actionTable». Таким образом, давая мне вопрос «верхнего уровня» задавать?

Я знаю, что я мог бы сделать это просто в PHP с помощью двух запросов MySQL, 1, чтобы выбрать все числовые значения из «actionsTable», то другой, чтобы выбрать вопросы

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

Конструкция этого база данных должна быть нормализована, но также динамическая, например команда администратора может использовать страницы администрирования для добавления/удаления вопросов, ответов и действий.

ответ

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

Это присоединяется два, сохраняя все значения в questionsTable, и показывая только те, где нет никакого состязания в actionsTable на поле действия.

+0

Вы абсолютная легенда. – Sjwdavies 2010-11-29 18:48:55

Смежные вопросы