我有一個使用MySQL的遊戲。我試圖展示最終遊戲分數列表,並且此列表應該排除用戶阻止的任何人。 下面是表的結構:需要幫助,排除MySQL中連接表中的某些行
table_game
------------
table_id int
person_id int
person_nom varchar(25)
finalscore int
scoretime datetime
table_blocked
--------------
table_id int
person_id int
person_id_blocked int
比方說,我爲person_id是 '1',我已經拒絕爲person_id '5'(所以有一排table_blocked用的table_id = 1,爲person_id = 1,person_id_blocked = 5)。 這意味着我不應該在我的結果中看到person_id'5'。
這裏的查詢,但爲person_id「5」是自我表現在:
SELECT
f.table_id,
f.person_id as fID,
f.person_nom AS fNOM,
f.finalscore AS fFINAL,
f.scoretime AS fTIME,
table_blocked.table_id,
table_blocked.person_id,
table_blocked.person_id_blocked
FROM
table_game f
LEFT OUTER JOIN table_blocked ON f.person_id = table_blocked.person_id
WHERE (
(fFINAL > 0)
AND ((table_blocked.person_id_blocked != '5') OR (table_blocked.person_id_blocked IS NULL))
)
ORDER BY fTIME DESC
LIMIT 5
我在做什麼錯?
考慮提供適當的DDL和/或sqlfiddle連同所需的結果集 – Strawberry
的SQL不即使在寫法上語法上也是正確的。 'ffinal'是一個列別名,所以它不能在'where'子句中被引用(或者數據結構通過具有該名稱的列以及與該名稱相混淆的列而超級混淆)。 –
謝謝 - 我是一名PHP程序員和MySQL新手。不知道WHERE子句中不允許使用別名。 – user3184415