如果p.user是页面创建者,如何首先显示block=1的成员?

btqmn9zl  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(179)

我有一个页面,这个页面有一个所有者。
我想选择此页面的成员。
问题是,如果是页面所有者登录(页面是如何创建的),我想首先(并且只为他)显示block=1的成员以进行join autorization。
所以我有:

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',
)

和页面成员(加入页面的成员):

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创建的页面,它有成员。如果登录者是页面所有者(页表,用户),我想首先选择block=1的成员。如果不是页面所有者,我只想选择block=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。
有什么想法吗?

yfwxisqw

yfwxisqw1#

你可以用 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
yebdmbv4

yebdmbv42#

可以在联接后筛选结果:

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

有了订单,你就有你想要的那种了

相关问题