我有一张学生桌:
id | age
--------
0 | 25
1 | 25
2 | 23
Run Code Online (Sandbox Code Playgroud)
我想查询所有学生,还有一个额外的专栏,用于计算同一年龄段的学生人数:
id | age | count
----------------
0 | 25 | 2
1 | 25 | 2
2 | 23 | 1
Run Code Online (Sandbox Code Playgroud)
这样做最有效的方法是什么?我担心子查询会很慢,我想知道是否有更好的方法.在那儿?
当git commit打开邮件编辑器显示一个简要的状态,这样的事情:
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch is ahead of 'origin/master' by 26 commits.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: Showcase/src/com/gigantt/BorderArea.mxml
# modified: Showcase/src/com/gigantt/Client.mxml
# modified: Showcase/src/com/gigantt/GraphItem.mxml
#
Run Code Online (Sandbox Code Playgroud)
我如何调整git以显示要提交的差异?我知道它可能是一个很长的差异,但仍然......非常有用.
当我在文件上运行git blame(使用msysgit)时,我总是得到以下类型的打印输出:
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200 1) package co
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200 2) {
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200 3) impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200 4) impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200 5) impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200 6) impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200 7) impor
Run Code Online (Sandbox Code Playgroud)
即它显示所有行都没有提交.
我在许多文件上尝试了这个,它有许多提交 - 总是相同的结果.我也试过使用相对/完整路径,但它似乎没有区别.
当我尝试使用TortoiseGit的责任时,它总是将每一行显示为在第一次提交时最后一次提交:

甚至想,正如我所说的,这些文件的历史实际上有数十次提交.
想法?
编辑 - 更多信息
如何在Windows批处理文件中打印时间(以毫秒为单位)?
我想测量批处理文件中行之间的时间,但是Windows的"time/T"不会打印毫秒.
通过使分支非常便宜,SVN使分支变得更容易,但合并仍然是SVN中的一个真正的问题--Git据说可以解决这个问题.
Git能实现这一目标吗?
(免责声明:我所知道的关于Git的全部内容都是基于Linus讲座 - 这里的总git noob)
我们在C++中使用RAII的次数越多,我们就越发现自己的析构函数会进行非平凡的释放.现在,解除分配(终结,但是你想要调用它)可能会失败,在这种情况下,异常实际上是让楼上的任何人知道我们的释放问题的唯一方法.但是再说一次,抛出析构函数是一个坏主意,因为在堆栈展开期间可能会抛出异常.std::uncaught_exception()让你知道什么时候发生,但不是更多,所以除了让你在终止之前记录一条消息之外你没有太多可以做的,除非你愿意让你的程序处于未定义的状态,其中一些东西被解除分配/最终化而一些不是.
一种方法是使用无抛出析构函数.但在许多情况下,这只是隐藏了一个真正的错误.例如,我们的析构函数可能会因为抛出某些异常而关闭一些RAII管理的数据库连接,并且这些数据库连接可能无法关闭.这并不一定意味着我们可以在此时终止程序.另一方面,记录和跟踪这些错误并不是每个案例的真正解决方案; 否则我们就不需要开始例外了.使用无抛出析构函数,我们还发现自己必须创建应该在销毁之前调用的"reset()"函数 - 但这只会破坏RAII的整个目的.
另一种方法是让程序终止,因为这是你可以做的最可预测的事情.
有些人建议链接异常,以便一次可以处理多个错误.但老实说,我从来没有真正看到用C++完成的工作,我也不知道如何实现这样的东西.
所以它是RAII或例外.不是吗?我倾向于无抛出的破坏者; 主要是因为它保持简单(r).但我真的希望有一个更好的解决方案,因为,正如我所说,我们使用RAII的次数越多,我们发现自己越多地使用执行非平凡事情的dtors.
附录
我正在添加链接到我发现的有趣的主题文章和讨论:
我有一个包含许多Visual C++项目的解决方案,所有这些项目都使用PCH,但有些项目具有特定的编译器开关以满足项目特定的需求.
大多数这些项目在各自的stdafx.h(STL,boost等)中共享相同的头文件集.我想知道是否可以在项目之间共享PCH,这样我就可以拥有一个普通的PCH而不是编译每个项目的PCH,解决方案中的大多数项目都可以使用.
似乎可以将PCH的位置指定为项目设置中的共享位置,因此我有预感这可行.我还假设所有使用共享PCH的项目中的所有源文件都必须具有相同的编译器设置,否则编译器会抱怨PCH与正在编译的源文件之间的不一致.
有没人试过这个?它有用吗?
一个相关的问题:这样的碎片PCH应该过于包容,还是会损害整体构建时间?例如,共享PCH可能包含许多广泛使用的STL标头,但某些项目可能只需要<string>和<vector>.当优化器必须丢弃由PCH拖入项目的所有未使用的东西时,使用共享PCH节省的时间是否必须在构建过程的稍后时间回收?
我的ASP.Net Web服务无法运行,因为应用程序池由于遇到身份危机而无法启动.
我在应用程序池中使用的用户是域用户,它是本地管理员,它在IIS_WPG中,我已经将其"作为操作系统权限的一部分" - 没有.纳达.每次都无法启动应用程序池.
将用户添加到IIS_WPG通常是缺少的,但我想还有其他的东西.
我试过的事情:
ps如果我使用网络服务用户,那一切都有效 - 这只是我的"自定义"用户失败了.使用此用户登录(以交互方式)可以正常工作.
编辑:
解决方案如接受的答案中所述(将"作为服务登录"权限添加到应用程序池的标识用户).
我将在尝试将"作为服务登录"权限添加到域用户时添加以供将来参考的用户:
"此设置与运行Windows 2000 Service Pack 1或更早版本的计算机不兼容...."
知道这与Windows 2000无关,只是域的组策略阻止您将此权限分配给用户.
在我的.bat文件中,我想基于日期时间为文件/目录生成唯一的名称.
例如
Build-2009-10-29-10-59-00
Run Code Online (Sandbox Code Playgroud)
问题是%TIME%不会这样做,因为它包含文件名中非法的字符(例如:).
tr批处理文件中有类似的东西吗?
任何其他想法如何解决这个问题(除了批处理解释器之外不需要额外的命令行实用程序)?
在为数据库(例如MySQL)设计模式时,会出现是否完全规范化表格的问题.
一方面连接(和外键约束等)非常慢,另一方面,您获得冗余数据和不一致的可能性.
这里的"优化最后"是正确的方法吗?即创建一个由书本标准化的数据库,然后查看可以非规范化的内容以实现最佳速度增益.
对于这种方法,我担心的是,我将采用可能不够快的数据库设计 - 但在那个阶段重构模式(同时支持现有数据)将非常痛苦.这就是为什么我很想暂时忘记我所学到的关于"正确"RDBMS实践的一切,并尝试一次"平台"方法.
这个数据库是否会插入重量会影响决定吗?
git ×3
batch-file ×2
c++ ×2
windows ×2
asp.net ×1
blame ×1
database ×1
destructor ×1
exception ×1
filenames ×1
msysgit ×1
mysql ×1
optimization ×1
pch ×1
performance ×1
raii ×1
rdbms ×1
sql ×1
svn ×1
time ×1
timestamp ×1
visual-c++ ×1