这是我的表结构...
表:位置_层次结构_级别
id parent_position_id position_id
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6
6 6 7
7 7 8
8 8 9
9 9 10
10 10 11
11 11 12
12 12 13
13 13 14
14 14 15
Run Code Online (Sandbox Code Playgroud)
我获取parent_position_id某个的查询position_id是:
select `parent_position_id` from `position_hierarchy_level` where position_id= 15;
Run Code Online (Sandbox Code Playgroud)
但是我如何才能获得某个 的最顶层父级呢position_id?parent_position_id例如,15 个中最上面的position_id将是1。
有没有一种方便的方法可以使用单个查询获取该值?或者我需要在 PHP 中创建一个循环吗?
背景
您好,我正在开发PHP和MySQL的实验/教育工具.我是SQL的新手,但我想从一开始就以正确的方式做事.我正在为所有变量替换使用PDO预处理语句,并且可以在任何地方进行反向操作(因此,据我所知,它不能移植到非MySQL数据库).关于我的问题,我有一个关于如何前进的想法,但是我需要花费几个小时来实现(我甚至对SQL的语法都是新的),所以同时我认为我先创建一个问题万一有人可以喊叫,"这不是办法!" 并节省我几个小时的努力.
问题
我想创建一个用户可以从下拉菜单中选择的界面:
A,A.x和A.y,B,B.z和B.y,在提交代码将执行一个内部联接,每个字段分别匹配,例如A.x = B.z,A.y = B.y等等,并返回所有匹配的行.
我的计划只是生成一个INNER JOINSQL语句,循环遍历字段并插入占位符(?),绑定相应的参数,最后执行语句.
有更简单的方法吗?有没有更好的方法呢?这会以某种方式被利用吗?
非常感谢,提前.如果没有人在我结束时做出回应(可疑),我会发布我的解决方案.
杂项.
假设我将验证
A和之间选择相同数量的字段B,并且字段名称不必相同:它们将按顺序匹配.(请指出我可能不知道的任何其他细节!)
最终,目标是将这些选择本身保存在"设置"表中.实际上,用户创建他们希望每次回来时都能看到的"视图".
我希望能够按行和列索引选择表格单元格,同时补偿rowspan和colspan。例如,在下表中,

我希望将 (1,2) 红色、(2,3) 绿色和 (3,3) 蓝色着色为:

我尝试了这个问题的答案,“按行号和列号选择表格中的任意单元格”,但这产生了:

这是 jsFiddle:http://jsfiddle.net/acheong87/27HuN/
我明白发生了什么,我什至发现了另一个问题,“Table cellIndex and rowIndex with colspan/rowspan”,其中的答案是作为插件提供的,但似乎令人难以置信的是,没有更简单的方法!毕竟,实际结果的着色似乎可以理解,但并不直观,而预期结果的着色似乎更直观且易于掌握。
谁能想到一种聪明而简单的方法来实现这一点?
更新
这是我(糟糕的)尝试的新 jsFiddle,以防它可能激发其他人的新想法。基本上,如果我们假设 row 和 col 标题没有跨越(当然,这不是一个有效的假设),那么我们可以使用偏移量来“定位”正确的单元格:
function getCell(table, r, c)
{
var rowHead = $(table.rows[r].cells[0]);
var colHead = $(table.rows[0].cells[c]);
var y = rowHead.offset().top + rowHead.outerHeight(true)/2;
var x = colHead.offset().left + colHead.outerWidth(true)/2;
return $(document.elementFromPoint(x, y));
}
Run Code Online (Sandbox Code Playgroud)
虽然演示似乎有效,但存在许多问题:
elementFromPoint似乎取决于视口。我无法理解错误.我正在使用一个简单的向量映射(由字符串键入并存储字符串向量):
typedef std::map<std::string, std::vector<std::string> > TRouteMarkets;
Run Code Online (Sandbox Code Playgroud)
以下代码(剥离),
void CFoo::Bar(const char* route, const char* market)
{
// ...
TRouteMarkets::key_type key(route);
TRouteMarkets::mapped_type mapped();
TRouteMarkets::value_type pair(key, mapped);
// ...
}
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
"Foo.cc",第518行:错误:无法找到std :: pair <const std :: string,std :: vector <std :: string >> :: pair(const std :: string,std)的匹配项:: vector <std :: string>())在CFoo :: Bar(const char*,const char*)中需要.
但是删除了()映射,即
TRouteMarkets::mapped_type mapped;
Run Code Online (Sandbox Code Playgroud)
修复错误.为什么?mapped在任何一种情况下都不是一个空字符串向量?
我希望能够将Outlook消息拖放到浏览器中并触发Javascript事件,例如,使用消息的GUID 创建消息的链接.
但我陷入了第一步 - 尝试在文件夹列表外的任何位置拖动Outlook邮件显示不允许的游标.
我正要放弃,除了我发现一些帖子建议启用操作的方法,例如 如何将电子邮件从Outlook拖放到.NET应用程序中?
有没有办法让这成为可能?(包括编写浏览器扩展,但并不理想.)
我有一个测试,期望在发现用户被挂起时抛出异常。
@Test(expected = SuspendedException.class)
public void testGetUserKeychain_WhenOneUserSuspended_ShouldThrowSuspended() throws Throwable {
when(userKeychain.getUserStatus()).thenReturn(UserState.OK);
when(otherUserKeychain.getUserStatus()).thenReturn(UserState.SUSPENDED);
when(keyLookup.lookupKeychainsByUserId(any()))
.thenReturn(CompletableFuture.completedFuture(ImmutableMap.copyOf(multiUserKeychains)));
try {
padlockUtil.getKeychains(
Sets.newSet("userid", "otheruserid")).toCompletableFuture().get();
} catch (ExecutionException e) {
throw e.getCause();
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到的例外是:
org.mockito.exceptions.misusing.UnnecessaryStubbingException:
Unnecessary stubbings detected in test class: PadlockUtilTest
Clean & maintainable test code requires zero unnecessary code.
Following stubbings are unnecessary (click to navigate to relevant line of code):
1. -> at com.xyz.server.padlock.PadlockUtilTest.testGetUserKeychain_WhenOneUserSuspended_ShouldThrowSuspended(PadlockUtilTest.java:119)
Please remove unnecessary stubbings or use 'lenient' strictness. More info: javadoc for UnnecessaryStubbingException class.
Run Code Online (Sandbox Code Playgroud)
我相信这是因为在 中PadlockUtil::getKeychains,挂起的用户是 …
我已经在这几个小时,但似乎无法解开这个.该错误与此段代码有关:
(这个问题底部的完整代码.我正在使用屏幕截图直观地显示问题.)
错误本身是:
没有类型变量的实例U存在,以便GetUsersForAdAccountResponse符合CompletionStage
在thenComposes 链的最开始,我擦除return并使用IntelliJ的"引入局部变量..."功能来查看整个链(直到并包括第1118行)返回的类型:
结果是
final CompletionStage<U> uCompletionStage = ...
Run Code Online (Sandbox Code Playgroud)
但是你可以看到包含方法的返回类型是
public CompletionStage<GetUsersForAdAccountResponse> ...
Run Code Online (Sandbox Code Playgroud)
什么阻止编译器推断GetUsersForAdAccountResponse?(再次,通常这里有一个return.)
我还尝试在每个过程中引入局部变量thenCompose,它们看起来都是正确的.每个产生一个CompletionStage<Foo>,下thenCompose一个Foo产生一个lambda期望并产生一个CompletionStage<Bar>,等等.(在一次代码重组中,我确实看到了嵌套,CompletionStage<CompletionStage<Foo>>但我认为这是我自己重写的一件神器.)
我不知道它是否会有所帮助,但这是整个方法:
@Override
public CompletionStage<GetUsersForAdAccountResponse> getUsersForAdAccount(
RequestContext context, GetUsersForAdAccountRequest request) {
Uuid adAccountId = request.getAdAccountId();
return verifyAuthorization(context,
PortcullisTemplates.Action.GET_USERS_FOR_AD_ACCOUNT.getName(),
portcullisTemplates.topOrganizationResource())
.thenCompose(auditLogPrincipal -> jdbiExecutor.executeInTransaction(handler -> {
// We purposely safeguard the account lookup as well behind Portcullis.
AdAccountDao adAccountDao = handler.attach(AdAccountDao.class);
if (adAccountDao.getAdAccountById(adAccountId) …Run Code Online (Sandbox Code Playgroud) 首先,它们在 Junit 5 动态测试指南的结论中是什么意思?
参数化测试可以替代本文中的许多示例。但是,动态测试与参数化测试不同,因为它们支持完整的测试生命周期,而参数化测试不支持。
我浏览了JUnit 5 – 参数化测试,相信我理解了语法级别的差异,并且相信我明白了这一点:
此外,动态测试在如何生成输入和如何执行测试方面提供了更大的灵活性。
但是看起来,为什么有人更喜欢参数化测试而不是动态测试?
我试过
jsonPayload.elapsed_ms > 5000
Run Code Online (Sandbox Code Playgroud)
我显然得到了字符“5”的字典顺序比较,因为我只看到“6”、“7”、“8”、“9”的结果(参见“200”之后每行的最终数字) :
我试过
double(jsonPayload.elapsed_ms)>5000
Run Code Online (Sandbox Code Playgroud)
也是如此,但似乎不是正确的语法。
这里有一整节关于转换的内容,但没有示例。
google-cloud-platform google-cloud-logging stackdriver google-cloud-stackdriver
以下是否有通用的简写?欢迎像番石榴这样的外部依赖项。
myList.stream().map(Foo::bar).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
如果我必须实现它,它会是这样的:
static <T, U> List<U> mapApply(List<T> list, Function<T, U> function) {
return list.stream().map(function).collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
有没有适用于任何 Iterable 的?如果没有,我该怎么写?我开始这样思考:
static <T, U, V extends Iterable> V<U> mapApply(V<T> iterable, Function<T, U> function) {
return iterable.stream().map(function).collect(???);
}
Run Code Online (Sandbox Code Playgroud)