MySQL база данных проблемы при получении данных из 4 таблиц? - PullRequest
0 голосов
/ 05 сентября 2018

tbl_users

tbl_questions

tbl_answares

tbl_questions_votes

SELECT
    `tbl_users`.`email`,
    `tbl_questions`.`q_id`,
    `tbl_questions`.`question`,
    `tbl_questions`.`tags`,
    `tbl_questions`.`posted_at`,
    SUM(tbl_questions_votes.upvote) AS upvotes,
    SUM(tbl_questions_votes.downvote) AS downvotes
FROM 
    `tbl_users`
INNER JOIN 
    `tbl_answares` 
ON 
    `tbl_answares`.`user_id` = `tbl_users`.`user_id`
LEFT JOIN 
    `tbl_questions` 
ON 
    `tbl_questions`.`q_id` = `tbl_answares`.`q_id`
LEFT JOIN 
    `tbl_questions_votes` 
ON 
    `tbl_questions`.`q_id` = `tbl_questions_votes`.`q_id`
WHERE
    `tbl_users`.`user_status` = 1 AND `tbl_answares`.`user_id` = '6'
GROUP BY
    `tbl_questions`.`q_id`
ORDER BY
    `tbl_questions`.`posted_at`
DESC

Над запросом возвращается электронное письмо пользователя, ответившего на вопрос (другие столбцы выводятся справа), но я хочу электронное письмо пользователя, который задал вопрос.

вывод: вывод

Ожидаемый результат

`tbl_users`.`email`, // email of user that asked the question
`tbl_questions`.`q_id`,
`tbl_questions`.`question`,
`tbl_questions`.`tags`,
`tbl_questions`.`posted_at`,
SUM(tbl_questions_votes.upvote) AS upvotes,
SUM(tbl_questions_votes.downvote) AS downvotes

1 Ответ

0 голосов
/ 05 сентября 2018

Попробуйте изменить INNER JOIN на tbl_questions_votes на LEFT JOIN, поскольку я предполагаю, что не имеет значения, имеет ли вопрос голосование или нет.

Во-вторых, вы присоединяетесь к столам answares и questions на user_id. Я не думаю, что это имеет слишком много смысла, мне кажется, что вы получаете users с questions, что они сделали, и со всеми answares, которые они отправили; в то время как ожидаемый результат - questions, который имеет этот пользователь answared!

Итак, я думаю, что было бы больше смысла, если бы вы присоединились так:

INNER JOIN 
    tbl_answares 
ON 
    tbl_answares.user_id = tbl_users.user_id
INNER JOIN 
    tbl_questions 
ON 
    tbl_questions.q_id = tbl_answares.q_id
LEFT JOIN 
    tbl_questions_votes 
ON 
    tbl_questions.q_id = tbl_questions_votes.q_id
LEFT JOIN 
    tbl_users usrs2 
ON 
    tbl_questions.user_id = usrs2.user_id

Это объединяет user с его answares вместе с answares определенным questions и votes, приведенным для тех questions, без исключения questions, который не имеет votes; и, наконец, присоединиться к users, который сделал каждый question, который вы извлекаете.

Если у вас есть какие-либо сомнения относительно объединения таблиц в SQL, я рекомендую эту замечательную тему SO и эту другую

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...