У меня есть term
БД. Каждый термин может быть частным или публичным.
Термины организованы в project
с.
Также есть таблица user
.
Если бы я создал SQL для извлечения данных, заботящихся о публичном статусе, и я заранее знаю, нужно ли мне разрешить публичный доступ, это выглядело бы так:
SELECT * FROM term<br>
JOIN project ON (project.id = term.id_project)<br>
WHERE term.public = true
(могло бы быть WHERE public
, но так понятнее)
или
WHERE (term.public = true OR term.public = false)
(мог быть полностью пропущен, но понятнее)
Но каждая комбинация пользователь-проект (user_project_mm
) может быть разрешена или запрещена для просмотра частных проектов. Попытка решить сразу дает что-то вроде:
SELECT * FROM term<br>
JOIN project ON (project.id = term.id_project)<br>
JOIN user_project_mm ON (user_project_mm.id_project = project.id)<br>
WHERE user_project_mm.id_user = $currentUserID<br>
[[IF user_project_mm.private THEN NOTHING ELSE AND term.public = true]]
Код внутри [[]] явно не SQL. Это своего рода переписывание SQL, которое необходимо здесь. Решение о добавлении AND term.public
или нет зависит от каждого конкретного поля записи результата user_project_mm.private
.
Я не хочу постобработать с PHP, так как это разрушит мою нумерацию страниц, сделанную с помощью LIMIT, и это в любом случае будет грязно. Есть ли для этого чистое решение SQL? Я объяснил это достаточно ясно?