Biny
Biny copied to clipboard
可以统计重复数量吗?
在写一个项目,需要统计表中的每个“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提问吧 我会解答的