Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 仅当p.user是页面创建者时,如何首先显示block=1的成员?_Mysql_Join_Left Join - Fatal编程技术网

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

Mysql 仅当p.user是页面创建者时,如何首先显示block=1的成员?,mysql,join,left-join,Mysql,Join,Left Join,我有一个页面,这个页面有一个所有者 我想选择此页面的成员 问题是,如果是页面所有者登录(如何创建页面),我想首先显示(,仅限他)block=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), `pri

我有一个页面,这个页面有一个所有者

我想选择此页面的成员

问题是,如果是页面所有者登录(如何创建页面),我想首先显示,仅限他)block=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_成员(加入页面的成员):

假设我有一个用户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

例如,如果p.user=2,则他不是页面所有者,因此不显示具有块1的成员,仅显示块0

有什么想法吗?

您可以在条件周围使用
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
可以在条件周围使用
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

您可以在联接后筛选结果:

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

通过order by,您可以获得所需的排序

您可以在加入后过滤结果:

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

按照顺序,您可以得到您想要的排序

第一个成员是什么意思。您如何将其排序为“第一”?@JNevill First成员。很抱歉我会编辑的。哦!明白了。感谢您的澄清。当它是页面所有者时,您想同时选择block=1和block=0,还是只选择block=1?@Barmar作为页面所有者,两者都是!谁不是唯一所有者block=0“第一个成员”是什么意思。您如何将其排序为“第一”?@JNevill First成员。很抱歉我会编辑的。哦!明白了。感谢您的澄清。当它是页面所有者时,您想同时选择block=1和block=0,还是只选择block=1?@Barmar作为页面所有者,两者都是!谁不是所有者?
p
列的block=0测试应该在
ON
子句中,因为它是
左连接
p
列的测试应该在
ON
子句中,因为它是
左连接
。感谢您的回答。我是否也可以使用
order by pm.block desc
首先显示block=1的用户?可以吗?谢谢你的回答。我是否也可以使用
order by pm.block desc
首先显示block=1的用户?可以吗?