Table: category
-- idcategory (PK)
-- idmember (FK: member that owns category)
Table: category_shared UNIQUE (idcategory,idmember)
-- idcategory (FK:referencing table category)
-- idmember (FK:member being shared with)
Table: last_viewed UNIQUE (idcategory,idmember)
-- idcategory (FK:referencing table category)
-- idmember (FK)
Я хочу один запрос, который извлекает все категории, к которым он принадлежал или принадлежал участнику, и последний раз, когда эта категория была просмотрена.Вот что я попробовал:
SELECT * FROM (category
LEFT JOIN category_shared USING (idmember))
INNER JOIN last_viewed ON
category.idcategory=last_viewed.idcategory OR
category_shared.idcategory=last_viewed.idcategory
WHERE category.idmember = '$member_id' OR category_shared.idmember = '$member_id'
Но он возвращает SIX идентичных строк для каждой уникальной категории.Вся эта структура базы данных была PITA с самого начала, поэтому я открыт для предложений по улучшению схемы.