小编Bil*_*win的帖子

获得每个组的最佳结果(在Oracle中)

如何在oracle查询中获得几个组的N个结果.

例如,给出下表:

|--------+------------+------------|
| emp_id | name       | occupation |
|--------+------------+------------|
|      1 | John Smith | Accountant |
|      2 | Jane Doe   | Engineer   |
|      3 | Jack Black | Funnyman   |
|--------+------------+------------|
Run Code Online (Sandbox Code Playgroud)

还有更多行占用更多.我想从每个职业中找到三名员工(比方说).

有没有办法在不使用子查询的情况下执行此操作?

sql oracle greatest-n-per-group

12
推荐指数
2
解决办法
7万
查看次数

Pythonic相当于unshift或redo?

我正在学习Python,我有一种情况,我想从迭代器中使用项目.棘手的部分是在某些条件下,我想"不迭代".也就是说,在循环之前将项放回到迭代器的前面.

例如,假设我从树上摘苹果.我的水果篮在需要清空之前只能容纳10公斤.但是我必须在我称之前挑选每个苹果,并确定这个苹果是否会超过篮子的容量.

在像Perl这样的语言中,我可以unshift()将苹果重新放回树上,然后让循环表达式重新选择苹果:

while ($apple = shift(@tree)) {
  $wt = weight($apple);
  if ($wt + weight(@basket) > 10) {
    send(@basket);
    @basket = ();
    unshift(@tree, $apple);
  } else {
    push(@basket, $element);
  }
}
Run Code Online (Sandbox Code Playgroud)

或者我也可以使用redo,它在块的顶部恢复处理,而不评估循环表达式.因此,在篮子被清空后,同样的苹果可以被重新加工.

while ($apple = shift(@tree)) {
  $wt = weight($apple);
  if ($wt + weight(@basket) > 10) {
    send(@basket);
    @basket = ();
    redo;
  } else {
    push(@basket, $apple);
  }
}
Run Code Online (Sandbox Code Playgroud)

对于这类问题,什么是最pythonic的解决方案?

python redo

12
推荐指数
3
解决办法
6934
查看次数

在数据库中实现分层数据结构

我知道有两种方法:邻接列表和嵌套树.据说由于大量查询,邻接列表在遍历上使用会很慢.但我不知道这方面的任何实际数字.我正在制作的网站将有200页.遍历生成(例如)站点地图需要花费超过0.3秒的时间吗?

使用LAMP堆栈在MySQL(innoDB)上运行.

如果可能的话,我更愿意实现邻接,因为设计更简单.

谢谢.

mysql database hierarchical-data

12
推荐指数
2
解决办法
2万
查看次数

MySQL:索引可变长度的json数组?

我想创建一个tags类型的列json:

例如,

id  |  tags
=========================================
1   |  '["tag1", "tag2", "tag3"]'
2   |  '["tag1", "tag3", "tag5", "tag7"]'
3   |  '["tag2", "tag5"]'
Run Code Online (Sandbox Code Playgroud)

我想tag在数组中索引每个数据,而不知道数组的长度(可变长度).

那么如果我查询包含的行tag2,它应该返回行1,3.

https://dev.mysql.com/doc/refman/5.7/en/json.html

无法为JSON列编制索引.您可以通过在生成的列上创建索引来解决此限制,该列从JSON列中提取标量值

通过"提取标量值",这是否意味着我必须单独提取和索引数组中的每个项目(这意味着我必须知道数组的最大长度以将它们全部索引)?如何索引可变长度数组?

mysql indexing json

12
推荐指数
3
解决办法
4881
查看次数

数据库表中的键/值对

我需要在我的数据库中设计一个Key/value表,我正在寻找最佳方法的指导.基本上,我需要能够将值与一组动态命名属性相关联,并将它们应用于外部键.

我需要支持的操作是:

  • 将键/值对应用于一组项目
  • 枚举所有当前活动的密钥
  • 确定具有给定键值的所有项目
  • 确定与给定键关联的值与某些条件匹配的所有项.

似乎最简单的方法是定义一个表:

CREATE TABLE KeyValue (
  id    int,
  Key   varchar...,
  Value varchar...
);
Run Code Online (Sandbox Code Playgroud)

似乎我可能会在Key列中复制大量数据,因为我可能会为大量文档定义任何给定的键.用一个整数查找替换Key varchar到另一个表似乎缓解了这个问题(并且使枚举所有活动密钥的效率明显提高),但是我仍然坚持维护查找表的问题(随时随地插入它)定义属性,并在键/值被清除时可能删除条目.

最好的方法是什么?

sql t-sql sql-server entity-attribute-value

11
推荐指数
3
解决办法
3万
查看次数

无法在Zend Framework中回滚事务

我在Zend Framework中使用以下代码进行事务处理,但回滚函数不起作用(数据通过insertSome($ data)插入数据库).怎么了?

            $db->beginTransaction();
            try{
               $model->insertSome($data);
               $model->insertAll($data2); //this line cannot be run and the whole transaction should be rolled back.
               $db->commit();
            } catch (Exception $e) {
                $db->rollBack();
                echo $e->getMessage();
            }
Run Code Online (Sandbox Code Playgroud)

mysql zend-framework transactions

11
推荐指数
1
解决办法
7310
查看次数

MySQL如何在磁盘上存储行?

我正在寻找有关MySQL如何在磁盘上存储数据的文档,特别是InnoDB和MyISAM.

我在大学里拿了一个数据库课程(写了一个原始的数据库),所以我有一个大概的想法.

我可以在这里问一堆关于各种类型如何存储在行中的问题,以及如何将行存储在磁盘上,或者进行整体操作,只是描述我的整个系统的难以理解的细节并询问如何构建它,但我认为简单地学习它如何存储记录就可以让我自己解决这个问题并减少带宽.

这是否记录在任何地方(源代码之外)?

谢谢!

mysql myisam innodb file-format

11
推荐指数
0
解决办法
1926
查看次数

如何识别MySQL数据库中未使用的索引?

我最近完全重写了一个大项目.在这样做的过程中,我整合了大量随机MySQL查询.我记得在开发前一个代码库的过程中,我一时兴起创建了索引,我确信有很多不再使用的代码.

有没有办法监视MySQL的索引使用情况,以确定正在使用哪些索引,哪些不是?

mysql indexing optimization

11
推荐指数
1
解决办法
4519
查看次数

在实体上存储更改:MySQL是否是正确的解决方案?

我想存储我在"实体"表上所做的更改.这应该像一个日志.目前它在MySQL中使用此表实现:

CREATE TABLE `entitychange` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `entity_id` int(10) unsigned NOT NULL,
  `entitytype` enum('STRING_1','STRING_2','SOMEBOOL','SOMEDOUBLE','SOMETIMESTAMP') NOT NULL DEFAULT 'STRING_1',
  `when` TIMESTAMP NOT NULL,
  `value` TEXT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
  • entity_id=我entity桌子的主键.
  • entitytype= entity表中更改的字段.有时只改变一个字段,有时多个.一个变化=一排.
  • value =字段"新值"的字符串表示形式.

将Field entity.somedouble从3 更改为2 时的示例,我运行这些查询:

UPDATE entity SET somedouble = 2 WHERE entity_id = 123;
INSERT INTO entitychange (entity_id,entitytype,value) VALUES (123,'SOMEDOUBLE',2);
Run Code Online (Sandbox Code Playgroud)

我需要select更改过去15天的特定实体和实体类型.例如:最后15天内最后一次更改SOMEDOUBLE为entity_id 123.

现在,有两件事我不喜欢:

  1. 所有数据都存储为TEXT- 虽然大多数(小于1%)不是真正的文本,但就我而言,大多数值都是DOUBLE.这是一个大问题吗? …

mysql database-design temporal-database database-partitioning entity-attribute-value

11
推荐指数
2
解决办法
2926
查看次数

为什么不是每种类型的对象都可序列化?

为什么不是每种类型的对象都可以隐式序列化?

在我有限的理解中,对象不是简单地存储在堆上而是指向堆栈上的指针吗?

您是否应该以编程方式遍历它们,以通用格式存储它们并且还能够从那里重建它们?

language-agnostic serialization

10
推荐指数
2
解决办法
714
查看次数