У меня есть страница, и на этой странице есть владелец.
Я бы хотел выбрать участников этой страницы.
Проблема в том, что если он является владельцем страницы, который вошел в систему (как создал страницу), я хотел бы показать сначала (и только для него) членов с блоком = 1 для объединения авторизации.
Так что я:
CREATE TABLE 'page' (
'id' int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
'user' INT(11) UNSIGNED NOT NULL, // who created the page.
'title' varchar(40),
'privado' tinyint(1) NOT NULL DEFAULT '0',
)
и page_members (которые присоединяются к странице):
CREATE TABLE IF NOT EXISTS 'page_members' (
'id' int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
'user' INT(11) UNSIGNED NOT NULL, // who is joining
'member' INT(11) UNSIGNED NOT NULL, // page id
'block' tinyint(1) NOT NULL DEFAULT '0', // block 1 = need autorization
FOREIGN KEY ('member') REFERENCES page ('id')
)
Предположим, у меня есть страница, созданная пользователем 1, и у нее есть члены. Я хотел бы сначала выбрать членов с блоком = 1, если кто-то вошел в систему, является владельцем страницы (таблица страниц, пользователь). если это не владелец страницы, я бы хотел выбрать только элементы с блоком = 0.
Поэтому я попробовал:
select p.user, p.title, pm.user, pm.block from page_members pm
left join page p on pm.member = p.id
where pm.member = 100 // show members from page 100
,
and p.user = 1 // from here I'm not sure what to do,
I'd like to select and show first the members with block = 1
but only if p.user = 1 (the page owner).
Например, если p.user = 2, он не является владельцем страницы, поэтому не показывайте участников с блоком 1, только блок 0.
есть идеи?
Вы можете отфильтровать результаты после объединения:
select p.user, p.title, pm.user, pm.block from page_members pm
left join page p on pm.member = p.id
where pm.member = 100
and ((p.user = 1) or ((p.user !=1) and (pm.block = 0)))
order by p.user, pm.block desc
и с заказом у вас есть тот вид, который вы хотите
p
должны быть в предложении ON
, потому что это LEFT JOIN
.
Вы можете использовать IF()
вокруг условия, чтобы сделать его зависимым от какого-либо другого условия.
select p.user, p.title, pm.user, pm.block
from page_members pm
left join page p on pm.member = p.id AND IF(p.user = @logged_in_user, true, pm.block = 0)
where pm.member = 100
order by pm.block desc
чтобы order by pm.block desc
показывать пользователям с block = 1? Это нормально?