小编And*_*ong的帖子

MySQL - 获取层次结构中的顶级父 ID

这是我的表结构...

表:位置_层次结构_级别

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_idparent_position_id例如,15 个中最上面的position_id将是1

有没有一种方便的方法可以使用单个查询获取该值?或者我需要在 PHP 中创建一个循环吗?

php mysql database

5
推荐指数
1
解决办法
5846
查看次数

安全地实施"可配置"连接系统

背景

您好,我正在开发PHP和MySQL的实验/教育工具.我是SQL的新手,但我想从一开始就以正确的方式做事.我正在为所有变量替换使用PDO预处理语句,并且可以在任何地方进行反向操作(因此,据我所知,它不能移植到非MySQL数据库).关于我的问题,我有一个关于如何前进的想法,但是我需要花费几个小时来实现(我甚至对SQL的语法都是新的),所以同时我认为我先创建一个问题万一有人可以喊叫,"这不是办法!" 并节省我几个小时的努力.

问题

我想创建一个用户可以从下拉菜单中选择的界面:

  1. 一张桌子A,
  2. 该表上的,例如一个或多个字段A.xA.y,
  3. 一张桌子B,
  4. 该表上的,例如一个或多个字段B.zB.y,

在提交代码将执行一个内部联接,每个字段分别匹配,例如A.x = B.z,A.y = B.y等等,并返回所有匹配的行.

我的计划只是生成一个INNER JOINSQL语句,循环遍历字段并插入占位符(?),绑定相应的参数,最后执行语句.

有更简单的方法吗?有没有更好的方法呢?这会以某种方式被利用吗?

非常感谢,提前.如果没有人在我结束时做出回应(可疑),我会发布我的解决方案.

杂项.

假设我将验证

  1. 用户在A和之间选择相同数量的字段B,
  2. 字段和表存在,
  3. 等等

并且字段名称不必相同:它们将按顺序匹配.(请指出我可能不知道的任何其他细节!)

最终,目标是将这些选择本身保存在"设置"表中.实际上,用户创建他们希望每次回来时都能看到的"视图".

php mysql pdo join

5
推荐指数
1
解决办法
187
查看次数

在补偿 rowspan 和 colspan 的同时按行和列选择表格单元格

我希望能够按行和列索引选择表格单元格,同时补偿rowspancolspan。例如,在下表中,

示例表

我希望将 (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)

虽然演示似乎有效,但存在许多问题:

  1. 不能假设行和列标题没有跨越。
  2. 如果行或列的中点不在视口中,则不起作用;elementFromPoint似乎取决于视口。
  3. 当滚动、边距等起作用时不能可靠地工作;一般脆弱;宁愿不依赖坐标数学。

javascript jquery

5
推荐指数
1
解决办法
4858
查看次数

为什么括号在初始化空向量时会有所不同?

我无法理解错误.我正在使用一个简单的向量映射(由字符串键入并存储字符串向量):

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在任何一种情况下都不是一个空字符串向量?

c++ stl compiler-errors

5
推荐指数
2
解决办法
259
查看次数

将Outlook邮件拖放到浏览器中

我希望能够将Outlook消息拖放到浏览器中并触发Javascript事件,例如,使用消息的GUID 创建消息的链接.

但我陷入了第一步 - 尝试在文件夹列表外的任何位置拖动Outlook邮件显示不允许的游标.

我正要放弃,除了我发现一些帖子建议启用操作的方法,例如 如何将电子邮件从Outlook拖放到.NET应用程序中?

有没有办法让这成为可能?(包括编写浏览器扩展,但并不理想.)

browser outlook drag-and-drop

5
推荐指数
1
解决办法
1万
查看次数

我应该如何处理对底层数据结构中的排序敏感的 UnnecessaryStubingException?

我有一个测试,期望在发现用户被挂起时抛出异常。

  @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,挂起的用户是 …

java exception mockito java-8

5
推荐指数
1
解决办法
1万
查看次数

没有类型变量的实例U存在,以便Foo符合CompletionStage <U>

我已经在这几个小时,但似乎无法解开这个.该错误与此段代码有关:

在此输入图像描述

(这个问题底部的完整代码.我正在使用屏幕截图直观地显示问题.)

错误本身是:

没有类型变量的实例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)

java lambda java-8 completable-future

5
推荐指数
1
解决办法
1034
查看次数

使用 JUnit 5 的 @ParametrizedTest 与 @TestFactory Stream&lt;DynamicTest&gt; 之间的区别是什么?

首先,它们在 Junit 5 动态测试指南的结论中是什么意思?

参数化测试可以替代本文中的许多示例。但是,动态测试与参数化测试不同,因为它们支持完整的测试生命周期,而参数化测试不支持。

我浏览了JUnit 5 – 参数化测试,相信我理解了语法级别的差异,并且相信我明白了这一点:

此外,动态测试在如何生成输入和如何执行测试方面提供了更大的灵活性。

但是看起来,为什么有人更喜欢参数化测试而不是动态测试?

java junit5 parametrized-testing

5
推荐指数
1
解决办法
1317
查看次数

如何在 Google Stackdriver Logging 高级查询中将字符串字段与数字进行比较?

我试过

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

5
推荐指数
2
解决办法
1691
查看次数

Java 8 流:myList.stream().map(Foo::bar).collect(Collectors.toList()) 的简写

以下是否有通用的简写?欢迎像番石榴这样的外部依赖项。

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)

java generics java-8 java-stream collectors

5
推荐指数
1
解决办法
487
查看次数