- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有三个表:用户、组和关系。
可以通过两种方式将用户放入组中:
我可以创建一个查询,以确定每个用户(或一个特定的),他属于哪个组,但是,手动关系(使用关系表)应该比 usrPts 具有更高的优先级grpMinPts?另外,我不想让一个用户显示两次(按点显示他的真实组,但也显示相关组)...
提前致谢! :) 我试过了:
SELECT * FROM users LEFT JOIN (relation LEFT JOIN groups ON (relation.gID = groups.grpID) ON users.usrID = relation.uID
使用这个我设法提取指定的关系(从关系表),但是,我不知道如何包括用户点,尊重上述优先级(首先指定)。我知道如何在 php 中的几个单独的查询中执行此操作,这很简单,但我很好奇,是否可以使用一个查询来完成?
编辑添加:
感谢真正的教育技术使用coalesce @GordonLinoff 提供,我设法使此查询按预期工作。所以,这里是:
SELECT o.usrID, o.usrName, o.usrPass, o.usrPts, t.grpID, t.grpName
FROM (
SELECT u.*, COALESCE(relationgroupid,groupid) AS thegroupid
FROM (
SELECT u.*, (
SELECT grpID
FROM groups g
WHERE u.usrPts > g.grpMinPts
ORDER BY g.grpMinPts DESC
LIMIT 1
) AS groupid, (
SELECT grpUID
FROM relation r
WHERE r.userUID = u.usrID
) AS relationgroupid
FROM users u
)u
)o
JOIN groups t ON t.grpID = o.thegroupid
此外,如果您像我一样想知道这种方法比在 PHP 中执行三个查询和处理更快还是更慢,答案是这种方法稍微快一些。此查询执行和在网页上显示结果的平均时间为 14 毫秒。三个简单的查询,用 php 处理并在网页上显示结果用了 21 毫秒。平均值基于 10 个案例,平均执行时间实际上是一个常数。
最佳答案
这是一种使用相关子查询获取每个值的方法。然后它使用优先规则选择适当的一个,如果 relations
存在则使用那个,否则使用组表中的那个:
select u.*,
coalesce(relationgroupid, groupid) as thegroupid
from (select u.*,
(select grpid from groups g where u.usrPts > g.grpMinPts order by g.grpMinPts desc limit 1
) as groupid,
(select gid from relations r where r.userId = u.userId
) as relationgroupid
from users u
) u
关于MySQL - 3 个表,这个复杂的连接是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16137695/
对于我的一个项目,我终于需要使用我的第一个多态类(std::cout 除外)。 我正在研究如何确保至少在某些情况下我有 100% 的去虚拟化调用。 这段代码是否合法可行? dynamic_cast 有
最近有一个编译问题,用这个片段说明: struct Base { }; template struct A : Base { A(){} A(Base&&) {} }; A foo()
注意:这是一个冗长的问题,需要对 MVVM“设计模式”、JSON 和 jQuery 有很好的理解.... 所以我有一个理论/主张 DHTML 中的 MVVM 是可能的 和可行的 并且想知道您是否同意/
我有一台 Mac 服务器,我正在构建 PHP 代码以允许用户上传图像、文档甚至视频文件。研究这个肯定让我很紧张,我希望上传的内容没有病毒。 自己构建一些东西会是一个巨大的挑战吗?您会这样做,还是会
根据文档,ASP.NET 项目(尚)不支持新的 PackageReference https://learn.microsoft.com/en-us/nuget/consume-packages/pa
我是一名优秀的程序员,十分优秀!