我有3個表數據如下:MYSQL錯誤的結果輸出
1表稱爲連接,其中connections.username1
是誰遵循和connections.username2
是一個誰是跟着一個。
它具有以下行:
connections.username1 | connections.username2
mikha | guy
guy | maricela
maricela | guy
第二臺名爲問題。它有一個名爲questions.asker_username
的提問者和一個接收questions.target_username
問題的人的列。當提問者被稱爲「sys.tem」並且目標被稱爲「every.one」時,它被認爲是全局性問題並且可以被所有成員回答。
匿名用戶可能會問,他們的IP記錄爲asker_username
。
它具有以下行:
questions.id | questions.asker_username | questions.target_username | questions.question
1 | mikha | guy | what's your name?
2 | mikha | maricela | What's your age?
3 | guy | mikha | what's your name?
4 | maricela | guy | favorite food?
5 | xx.xx.xxx.xx | mikha | favorite pet?
6 | xx.xx.xxx.xx | guy | first name?
7 | xx.xx.xxx.xx | maricela | first name?
8 | sys.tem | every.one | what's ur name?
9 | sys.tem | every.one | favorite movie?
10 | sys.tem | every.one | favorite game?
第三表被稱爲答案。答案表中的id與問題ID相同。此表有一個id和用戶名和答案的列。
answers.id | answers.username | answers.answer
1 | guy | my name is guy
2 | maricela | my name is maricela
3 | mikha | my name is mikha
4 | guy | pizza
8 | guy | guy is my name
8 | maricela | maricela is my name
9 | maricela | avatar
我想它結合了與 「mikha」,他跟隨人以下條件的查詢:
1)questions.asker_username
不是 「mikha」
2)questions.target_username
要麼是「mikha 「或他遵循的任何用戶。
3)如果questions.target_username
等於「every.one」並回答「mikha」,則顯示該問題。
4)如果questions.target_username
等於「every.one」,並由任何「mikha」跟隨的人回答,則顯示問題及其答案。如果沒有「mikha」關注用戶的回答,請不要顯示該問題。
5)如果questions.target_username
等於「every.one」並且根本沒有人回答,則顯示該問題一次。
6)如果questions.target_username
等於「every.one」並且沒有被「mikha」回答並且沒有被任何他回答的人回答,則只顯示一次問題。
我用下面的查詢:
SELECT questions.id,answers.id,questions.asker_username,questions.target_username,
answers.username,questions.question,answers.answer
FROM questions
LEFT JOIN answers ON (questions.id = answers.id)
LEFT JOIN connections ON connections.username1 = 'mikha'
AND (questions.target_username = connections.username2
OR questions.asker_username = connections.username2
OR connections.username2 = answers.username)
WHERE questions.asker_username <> 'mikha'
AND (questions.target_username = 'mikha'
OR questions.target_username = connections.username2
OR (questions.target_username = 'every.one'
AND (answers.username = 'mikha'
OR answers.username = connections.username2
OR answers.username IS NULL)
)
)
GROUP BY questions.id,answers.username
結果我想到:
questions.id | answers.id | questions.asker_username | questions.target_username | answers.username | questions.question | answers.answer
3 | 3 | guy | mikha | mikha | what's your name? | my name is mikha
4 | 4 | maricela | guy | guy | favorite food? | pizza
5 | 5 | xx.xx.xxx.xx | mikha | NULL | favorite pet? | NULL
6 | 6 | xx.xx.xxx.xx | guy | NULL | first name? | NULL
8 | 8 | sys.tem | every.one | NULL | what's ur name? | NULL
8 | 8 | sys.tem | every.one | guy | what's ur name? | guy is my name
9 | 9 | sys.tem | every.one | NULL | favorite movie? | NULL
10 | 10 | sys.tem | every.one | NULL | favorite game? | NULL
結果我居然得到:
questions.id | answers.id | questions.asker_username | questions.target_username | answers.username | questions.question | answers.answer
3 | 3 | guy | mikha | mikha | what's your name? | my name is mikha
4 | 4 | maricela | guy | guy | favorite food? | pizza
5 | 5 | xx.xx.xxx.xx | mikha | NULL | favorite pet? | NULL
6 | 6 | xx.xx.xxx.xx | guy | NULL | first name? | NULL
8 | 8 | sys.tem | every.one | guy | what's ur name? | guy is my name
10 | 10 | sys.tem | every.one | NULL | favorite game? | NULL
我建http://sqlfiddle.com/#!2/29929e/1方案展示你實際得到的結果
謝謝:)
這是非常好的問題描述,的確,但是由於SO規則,什麼是問題(我沒有看到任何問號)? – shadyyx
什麼是實現預期結果的正確查詢?這讓我瘋狂了一個多星期:(謝謝:) –
要求4和6相互矛盾。 4說:如果沒有人mikha的回答,請不要回答。 6說:如果沒有人回答,請回答。 –