Java / MySQL-在ResultSet上进行选择。

| 因此,我在MySQL上进行了大量选择,并获取了很多数据-按索引排序。 例如:
select * from nodes where config_id = 1;  
提供(仅显示遗留物)
| definition_id (PK) | position | parent | 
-------------------------------------------
   90                      1         0 << \"root\"
   08                      2         0
   34                      3         0
   22                      4         0
   17                      1         7  << another defn_id
   38                      2         7
   23                      3         7
   07                      1         90
如果这没有任何意义,请想象定义一棵树,其中90、8、34和22是根的子代。 那么7是90的孩子,而17、38、23是7的孩子(根的孙子)。 为了处理此问题,我们找到所有父节点为0的节点,将其添加,然后查看所有那些节点,查看它们是否有子节点(通过从父节点获取它们,或者不查看任何值并将其视为叶子) )。如果他们有孩子,请添加他们,然后递归继续直到树被构建。 这不是最有效的数据存储,但是其中一项要求是“单行更改”以移动节点和所有子节点的子集。我宁愿定义一个字符串0.1.6等,但这就是事实。 因此,这在测试中相当有效,但是当我们需要每天进行100,000次此操作(不进行缓存-没有意义,都稍有不同)时,我们需要对数据库的命中次数尽可能少(即一次)。您说很容易,只需掌握全部流程即可。但是,它们并不都是顺序的-正如您在上面看到的,90在7以下。是的,这些例子令人纵容,但是它说明了我们需要某种顺序的问题。 简而言之,问题基本上是,它们是否是在ResultSet上进行子选择的一种简单(且最好便宜)的方法-即将parent == 7的所有结果都放入另一个ResultSet中并进行处理? 永恒的爱和欣赏,以换取思想/评论。     
已邀请:
我不知道对ѭ2进行子选择的方法。如果您想保留一个查询,则可以使用以下方法在内存中进行管理:
// class to represent your rows
class Row {
    int definitionId;
    int position;
    int parent;
}

// map of parents to list of their rows
Map<Integer, List<Row>> parentMap = new HashMap<Integer, List<Row>>();

// iterate over all results, build row objects and populate the map
while (rs.next()) {
    Row row = new Row();
    row.definitionId = rs.getInt(\"definition_id\");
    row.position = rs.getInt(\"position\");
    row.parent = rs.getInt(\"parent\");

    // find the list of rows for the parent, create it if it doesn\'t exist
    List<Row> rows = parentMap.get(row.parent);
    if (rows == null) {
        rows = new ArrayList<Row>();
        parentMap.put(row.parent, rows);
    }

    // add row to the list for its parent
    rows.add(row);
}

// find all rows for parent == 7
for (Row row : parentMap.get(7)) {
    // process row
}
    
我们的工作非常相似。我们拥有使用oracle的优势,因此“以...开头为...连接”语法是很幸运的。但是,我们仅使用它来加载内存数据结构,该数据结构支持诸如get_children,获取同级,获取父级之类的树型函数。 我会更倾向于使用db来加载一些支持那些类型的函数的对象。我对Java不太满意,因此我不确定实现情况,但希望这可以帮助您入门。     
您可以在DBMS级别上执行此操作,例如,在MySQL http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/上查看。 WhiteFang34的答案很好,因为mySQL不支持分层查询(您可以在ORACLE中找到它:
start ... connect by
)。可能会在将来实现,但是现在我们只能使用变通方法(例如在链接上)。基本思想是在运行DBMS以及由供应商实施递归查询的机器上使用内存(具有优化,强大的算法,支持等)。 其他解决方法是编写存储过程。     
您可以先选择一个临时表 http://dev.mysql.com/doc/refman/5.1/en/create-table.html 然后在临时表上进行辅助选择。临时表是“每个连接”,因此它可能对您不起作用。     

要回复问题请先登录注册