有活動。活動可以是私人的 - 只有被邀請的用戶才能看到它的,公開的 - 所有人都可以看到 - 只有羣組成員才能看到它。團體可以是公共或私人的。我們不應該顯示私人團體的活動。如何使用隱私設置選擇數據?
event
id, title, group (nullable), is_private
event_invitee
event_id, user_id
group
id, title, is_open
group_participant
group_id, user_id
所以,現在提供給我們執行的查詢類似的信息(僞)當前認證的用戶顯示事件:
SELECT
e
FROM event e
LEFT JOIN e.invitees i WITH i.user = :current_user # is current user invited to event ?
LEFT JOIN e.group g
LEFT JOIN g.participants p WITH g.user = :current_user # is current user are participant of group?
WHERE ((e.group IS NULL OR g.is_open = true OR (g.is_open = false AND p IS NOT NULL))
AND (r.is_private = false OR (r.is_private = true AND i IS NOT NULL)))
AND /* other filters, like by location */
這是效果很好,但很slooow。並沒有可能性陳舊它。如何改變結構以獲得更快和可升級的結果?
而不是僞代碼,你應該制定出實際的查詢和[解釋](http://dev.mysql.com/doc/refman/5.5/en/explain.html)以瞭解索引使用情況和可能的優化。到目前爲止,你有什麼努力來優化MySQL服務器和查詢? – Stennie
在MySQL中WITH WITH? – Kermit
@njk這是僞代碼。 – Koc