Как сначала показывать элементы с block = 1, только если p.user является создателем страницы? - PullRequest
0 голосов
/ 31 мая 2018

У меня есть страница, и у этой страницы есть владелец.

Я бы хотел выбрать участников этой страницы.

Проблема в том, , если , то этовладелец страницы, который вошел в систему (как создал страницу) Я хотел бы показать сначала ( и только для него ) участников с блоком = 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, и в ней есть участники.Я хотел бы выбрать first членов с block = 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.

есть идеи?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вы можете отфильтровать результаты после объединения:

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

и в том порядке, как у вас есть нужный вам сорт

0 голосов
/ 31 мая 2018

Вы можете использовать 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
...