Tencent / Biny

Biny is a tiny, high-performance PHP framework for web applications

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

可以统计重复数量吗?

3DMXM opened this issue · comments

在写一个项目,需要统计表中的每个“publish”的数量并列出来,比如说表“list”:

+------+----------+
|  id  | publish  |
+------+----------+
| 1    |   小明   |
| 2    |   小红   |
| 3    |   小刚   |
| 4    |   小明   |
| 5    |   小明   |
| 6    |   小刚   |
| 7    |   小明   |
| 8    |   小刚   |
+------+----------+

然后我想要结果是:

 array(
        array('小明'=>4),
        array('小刚'=>3),
        array('小红'=>1),
);

请问要怎么写?(对不起,我PHP还是新手)

// count(distinct publish) 返回去重后数量
$count = $this->testDAO->count('publish');
count 传publish 参数即可获取去重后的数量

如果要去重的数据可以用distinct方法
$list = $this->testDAO->disinct('publish');

不对 你这个是想要的是 group后的数据吧
$this->xxxDAO->group('publish')->addition(['count'=>'id'])->query('publish');
可以用这个方法获取group后的各个publish的数量

文档可以参考这个
http://www.billge.cc/#dao-group

可以了,非常感谢

不对 你这个是想要的是 group后的数据吧
$this->xxxDAO->group('publish')->addition(['count'=>'id'])->query('publish');
可以用这个方法获取group后的各个publish的数量

文档可以参考这个
http://www.billge.cc/#dao-group

大佬,我又有一个新的问题,游标“cursor”里面,我传递了参数“false”
cursor(array('id'),false)
但是在 “while ”循环里面,还是不能使用其他sql语句;
可能是“$this”的问题,请问要怎么写呢?

@3DMXM 跟$this应该是没有关系的 加false的目的是建一个独立的mysql连接句柄,就不会因为未执行完而不能执行其他语句。正常加了false就行了
你看看sql执行的错误是什么 可以在logs目录下看看有没有错误信息,如果SYS_CONSOLE打开的话也可以在控制台看到错误输出

@billge1205 我看了一下,我的代码是(这是嵌套在foreach循环里面的):

$mod = $this->modsDAO->filter(array("mods_publish"=>$val));
$mod = $mod->filter(array("<="=>array('mods_createTime'=>date('y-m-0 0:0:0',strtotime('-1 month')))));
$mod = $mod->cursor(array('id'),false);

while($val2 = Database::step($mod)){
	$data = $this->modsDAO->filter(array('id'=>$val2['id']))->query(array('id'));
	print_r($data);
	exit();
}

输出在页面上的只有一个

Array
(
)

错误日志是

[NOTICE]2020-05-09 11:31:56:884[192.168.7.10] /admin/upUserMods
WARNING => Undefined index: reorganize
#1 /home/wwwroot/mod/lib/logger/Logger.php(258)
[NOTICE]2020-05-09 11:31:56:892[192.168.7.10] /admin/upUserMods
WARNING => Undefined index: reorganize
#1 /home/wwwroot/mod/lib/logger/Logger.php(226)
[ERROR]2020-05-09 11:31:56:892[192.168.7.10] /admin/upUserMods
sql Error => sql Error: Commands out of sync; you can't run this command now [SELECT `id` FROM Web.`mods` WHERE `id`=151395]

@3DMXM 你看下下载的是否是最新的Biny 可以在DAO.php里找一下cursor方法看下是否有第二个参数支持。看错误还是因为mysql单例连接导致的。理论上传false就可以避免这个问题
另外 你上面的这个例子其实可以 直接cursor完整行内容,while里就不用再获取一遍了

@billge1205 是文件版本问题,我重新下载了一个新的DAO.php文件替换掉,就可以了,谢谢。

我上面的例子,实际还需要进行“update()”的操作,但总是返回空值,我就换个东西试了一下,发现都是空值。。。

@3DMXM 最好是lib库都替换一下吧 update的话config.php里有个配置 returnAffectedRows
这个控制返回的是影响行数还是 返回true/false

@billge1205 好的,回头更新一下,另外,有没有技术交流群之类的,遇到问题百度Google都搜不到想要的结果。。。有点难受..

@3DMXM 这个对外的确没有交流群 不好意思 Biny主要是针对内部使用的
如果有问题 直接issue提问吧 我会解答的