(原文发布于2013年12月30日,原文链接Unique Index and its Rationale)
本文收录于[go4pro.org]
====
这篇文章转移到比较后台的东西:MySQL,特别是数据库中唯一性索引(Unique Index)的使用和隐藏在之后的一些道理,收到了不少反响。
(原文发布于2013年12月30日,原文链接Unique Index and its Rationale)
本文收录于[go4pro.org]
====
这篇文章转移到比较后台的东西:MySQL,特别是数据库中唯一性索引(Unique Index)的使用和隐藏在之后的一些道理,收到了不少反响。
(原文发布于2013年12月23日,原文链接PHP and WMI – Dig deep into Windows with PHP)
本文收录于[go4pro.org]
====
这篇文章是我第一次抓编辑提供的主题(之前都是我自己的建议)。
WMI提供了对Windows操作系统的一些接口,可以获得很多系统信息。
(原文发布于2013年12月9日,原文链接Dart and PHP: A Legacy Animal Guess Game)
本文收录于[go4pro.org]
====
11月份我没能在Sitepoint发表文章,原因是10月份的费用支付出了问题,所以我暂时停止了供稿直到我收到第一次的稿酬为止。
这片文章是我第一次开始结合Dart和PHP进行开发。其出发点是我早年玩Apple II时的印象:一个猜动物的游戏。
(原文发布于2013年10月28日,原文链接Building a Web App with Symfony 2: Finalizing)
本文收录于[go4pro.org]
====
这是Symfony 2系列的第三篇。介绍了很实用的一些东西:图像水印,分页,NativeQuery。
(原文发布于2013年10月21日,原文链接Building a Web App With Symfony 2: Development)
本文收录于[go4pro.org]
=====
这是Symfony系列的第二篇。进一步介绍了路由,控制器,实体和仓库,模板。
(这是我为Sitepoint写的第一篇文章,原文发布于2013年10月14日,原文链接Building a Web App with Symfony 2: Bootstrapping)
本文收录于[go4pro.org]
=====
这是一个系列文章,总共有三篇,在第一篇中我详细介绍了设置,Bundle,MVC的概念,路由,数据库等方面。限于篇幅,很多东西没能完全展开。不过作为一个开始,我觉得我已经做得不错了。
总结一下目前在用的一些开发工具。
我不是开发人员,但是也喜欢偶尔开发一些小东西。
开发所使用的语言局限在C/C++、C#和PHP、HTML上。
C/C++我用的是NetBeans,PHP也是。NB对我使用的PHP框架Symfony 2的支持是非常好的。 唯一值得诟病的地方是我一直没有调好字体,所以中文字体下的英文显示很烂。
C#我用两个IDE,一个是Visual Studio 2012 Express版本,一个是# Developer。值得推荐后者,免费、稳定、高效。
“任氏有无轩”的后台中有一个统计是得出每天对书籍详情页面的访问数量,结果集很简单:一个日期,一个该天的访问次数。
在原生SQL下,这个并不复杂,如下的语句就可以完成: select count(v.bid) vc, date(from_unixtime(v.visitwhen+15*60*60)) vd from book_visit v group by vd order by vd。
但是这个语句稍作变动(将book_visit改为FQN的引用)在SF2中用常规的createQuery将不能执行,提示date函数不被支持。
解决这个问题有两种方法,一种是quick-and-dirty的纯原生SQL:
$q = $em->getConnection()->prepare('select count(v.bid) vc, date(from_unixtime(v.visitwhen+8*60*60)) vd from book_visit v group by vd order by vd');
$q->execute();
return $q->fetchAll();
这个方法简单明了,适合初学者使用。
作为SF2和Doctrine的推荐方法,我们要使用所谓的ResultSetMapping和createNativeQuery。
我们可以这样简单的理解,ResultSetpMapping提供了一种映射机制,将原生SQL返回的字段映射到结果集的域,从而使得Doctrine可以以此构造返回的结果集,然后执行SQL语句,并将结果返回。
应该说,即使你不使用createNativeQuery,而只是用createQuery,Doctrine也还是会隐含的做一个ResultSetMapping的,只是不用显式调用罢了。
代码如下:
public function getVisitCountByDay()
{
$em = $this->getEntityManager();
$rsm=new DoctrineORMQueryResultSetMapping;
$rsm->addScalarResult('vc', 'vc');
$rsm->addScalarResult('vd', 'vd');
$q=$em->createNativeQuery('select count(v.bid) vc, date(from_unixtime(v.visitwhen+15*60*60)) vd from book_visit v group by vd order by vd', $rsm);
$res=$q->getResult();
return $res;
}
这个调用中,最关键的其实是两个addScalarResult。 vc是标量结果很自然,但是vd为什么是标量结果?Doctrine的文档对此语焉不详。
我的理解是,一旦结果集中包含了一个标量结果(vc),那么所有其它结果也自然要变为标量结果。STOP。
本文收录于[go4pro.org]
今天继续加深书籍详细信息页面的构造。
在G+上95对我的进展发了一个评论:
再加上点自动抓取网上共享章节的功能
对这个要求,我只能说我只能实现一点点。我将在详细信息页面中构造一个显示豆瓣对应书籍的信息的部分。
另外,我要实现一个功能是在这个页面中编辑书籍tags的功能。