2015-12-19 2 views
-1

Я создал две таблицы, в одной из которых хранятся вопросы викторины, а другой хранит все ответы, сделанные пользователями.Объединяйте таблицы, когда поля не равны - PHP MySQL

Первая таблица называется «вопросы» содержит следующие вопросы:

Field names: id|question 
Eg. contents: 
1|what's your fav color? 
2|what's your fav animal? 

Вторая таблица под названием «ответы» хранит все ответы, которые пользователи сделали:

Fields names: id|questionid|userid|answer 
Eg. contents: 
1|1|1|Red 
1|1|3|Magenta 
1|1|4|Green 

Я хотел бы выберите те вопросы, на которые еще не ответил пользователь. Я храню идентификатор текущего пользователя в сеансе $ _SESSION ['id']. Я пытался так много способов, чтобы получить эти вопросы, ближайший запрос я сделал, был такой:

$query = SELECT questions.*, answers.* FROM questions LEFT JOIN answers ON questions.id=answers.questionid WHERE answers.id IS NULL OR answers.userid <> '.$_SESSION['id']; 

Это не будет работать, потому что если есть другой идентификатор в таблице ответов на тот же вопрос ид, он по-прежнему выбирает эту строку. В чем может быть проблема? Где я испортил свой запрос?

Заранее благодарим за вашу помощь!

ответ

1

Условие Вашего местоположения не в тех местах. Поскольку вам нужно попытаться найти совпадение между конкретным пользователем и вопросом, а обнаружить несоответствие, пользовательская часть должна войти в предложение ON с нулевой проверкой в ​​предложении WHERE;

SELECT q.* 
FROM questions q 
LEFT JOIN answers a 
    ON q.id = a.questionid 
    AND a.userid = YOUR_USER_ID 
WHERE a.id IS NULL 

An SQLfiddle to test with.

+0

С одним ответом на вопрос он отлично работает, но если есть больше вопросов с большим количеством ответов, это происходит :( http://sqlfiddle.com/#!9/cd6560/2 Вопрос 2 уже был дан пользователем: 1, но запрос SELECT по-прежнему выбирает второй вопрос. – Kobanric

+0

@Kobanric Извините, 'a.id', естественно, должен быть' a.questionid', который является полем, которое должно соответствовать идентификатору вопроса. Обновлен ответ/SQLfiddle. Http://sqlfiddle.com/#!9/cd6560/8 –

+0

Удивительный! Большое спасибо за вашу помощь. – Kobanric