2015-11-08 2 views
1

Я пытаюсь создать страницу, где я могу видеть, кто ответил на какой вопрос. Я следующие таблицы:SQL innerjoin 4 таблицы

-(poeple_who_ask) 
(id) 
(username) 

-(questions) 
(id) 
(id_who_ask) 
(question) 

-(choises) 
(id) 
(id_question) 
(choise) 

-(persons_who_answer) 
(id) 
(id_who_ask) 
(id_question) 
(username) 

-(answers) 
(id) 
(id_question) 
(id_choise) 
(id_person) 

Теперь я пытаюсь сделать некоторые innerjoin запрос, чтобы заполнить пару страниц.

-получите запрос, чтобы ответить на вопрос. -who не ответилd.

каждый innerjoin запрос я сделать оседает в ошибке :( может кто-то помочь мне йоту это? Я довольно новый в innerjoin :) может быть, шахтные столы неправы :) все positife ответы могут помочь мне один в путь :)

вопросы множественного answerd как: какие цвета флага -> красный белый синий/зеленый Yelllow синий/фиолетовый зеленый желтый

Thnx в пожилом

редактирования: eventulie я хочу его реализовать в сайт, на котором лицо, которое спрашивает, может е кто ответил, что и кто не ....

+0

пожалуйста, покажите ваши попытки innerjoin запросов и как они потерпели неудачу. – jochen

+0

Редактировать свой вопрос и показать образцы данных и желаемые результаты. –

+0

отредактировал :) thnx для кончика гордона. @jochem жаль, что я сделал много попыток и поисков в google перед тем, как отправиться сюда :) – hexedecimal

ответ

4

Вы можете сделать это:

SELECT 
    q.id   AS QuestionID, 
    q.question AS Questoin, 
    ask.username AS PersonWhoAsked, 
    pa.username AS PersonWhoAnswered, 
    c.choise  AS AnswerChoice 
FROM questions AS q 
INNER JOIN people_who_ask  AS ask ON q.id_who_ask = ask.id 
INNER JOIN answers   AS a ON q.id   = a.id_question 
INNER JOIN choises   AS c ON a.id_choice = c.id 
INNER JOIN persons_who_answer AS pa ON a.id_person = pa.id 
            AND pa.id_question = q.id; 

Обратите внимание, что, если вопрос не имеет ответа, он не будет присутствовать в эта таблица, чтобы включить те вопросы, которые не имеют ответов, вы должны использовать LEFT JOIN так:

SELECT 
    q.id   AS QuestionID, 
    q.question AS Questoin, 
    ask.username AS PersonWhoAsked, 
    t.username AS PersonWhoAnswered, 
    t.choise  AS AnswerChoice 
FROM questions AS q 
INNER JOIN people_who_ask  AS ask ON q.id_who_ask = ask.id 
LEFT JOIN 
(
    SELECT a.id_question, c.choice, pa.username 
    FROM answers AS a 
    INNER JOIN choises   AS c ON a.id_choice = c.id 
    INNER JOIN persons_who_answer AS pa ON a.id_person = pa.id 
) AS t ON t.id_question = q.id; 
+0

thnx для вашего ответа, я попробую сегодня вечером реализовать :) – hexedecimal

+0

thnx для ответа, и я попробовал его сейчас ... очень полезно и узнал что-то .... но извините, не то, что я хотел, я редактирую мой вопрос :) thnx – hexedecimal

+0

второй запрос с левым соединением-> где берется буква t в t.choise и t.username ??? – hexedecimal

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