gpt4 book ai didi

php - CakePHP 数据库查询 DISTINCT/GROUP BY 错误

转载 作者:行者123 更新时间:2023-11-30 23:28:05 26 4
gpt4 key购买 nike

在我的 CakePHP 模型中,我试图从我的表中获取一些数据。
我尝试使用 DISTINCT,但使用 DISTINCT 似乎不会更改查询结果。
我可以看到许多行具有相同的 nick

使用 'DISTINCT Mytable.nick'

$this->Mytable->find('all',
array(
'fields'=> array(
'DISTINCT Mytable.nick',
'Mytable.age', 'Mytable.location',
),
'conditions' => array('Mytable.id >=' => 1, 'Mytable.id <=' => 100),
'order' => array('Mytable.id DESC')
));

'group Mytable.nick'

$this->Mytable->find('all',
array(
'fields'=> array(
'Mytable.nick',
'Mytable.age', 'Mytable.location',
),
'conditions' => array('Mytable.id >=' => 1, 'Mytable.id <=' => 100),
'group' => 'Mytable.nick',
'order' => array('Mytable.id DESC')
));

使用'Mytable.nick'

$this->Mytable->find('all',
array(
'fields'=> array(
'Mytable.nick',
'Mytable.age', 'Mytable.location',
),
'conditions' => array('Mytable.id >=' => 1, 'Mytable.id <=' => 100),
'order' => array('Mytable.id DESC')
));

编辑:似乎连 CakePHP 2.1 都不能使用 DISTINCT 选项。当我尝试“GROUP BY”时,它解决了我的问题。但是正如您从我的查询中看到的那样,我需要使用 Mytable.id 后裔对结果进行排序。当我使用 GROUP BY 时,当 Mysql 找到相关行时,它不会占用其他行。例如。

  • id=1, nick=mike, age=38, location=uk
  • id=2, nick=albert, age=60, location=usa
  • id=3, nick=ash, age=42, location=uk
  • id=4,nick=albert,age=60,location=new_zelland

当我使用 group Mytable.nick 时,我在结果中看不到第 4 行,但看到了第 2 行。因为当 mysql 第二次看到“albert”时,它并没有把它放入我的结果中。但我需要最新的“艾伯特”结果。不可能吗?

Edit2:似乎 order by/group by 冲突是一个常见问题。我在 this question 中找到了一些提示.但它为本地 Mysql 查询提供了解决方案。我需要 CakePHP 类型查询的解决方案。

最佳答案

不清楚为什么要按昵称分组并按 ID 排序。您是否打算使用像 COUNT() 这样的聚合函数来查看同一昵称出现了多少次?总之你的总体目标我还不清楚。可能值得了解 HAVING MySQL 关键字。

更新:好的,这更有意义。因此,您需要在条件上使用子选择,或者可能将其表示为连接。我将尝试展示一个在 WHERE 子句中使用子选择的示例。

/* select last occurrence for each nick (if you need one for each location )*/
SELECT nick, age, location
FROM myTable t1
WHERE id =
(SELECT MAX(id)
FROM myTable t1
WHERE t1.nick = t2.nick);

会认为这样的事情会起作用:

$this->Mytable->find('all',
array(
'fields'=> array(
'Mytable.nick',
'Mytable.age', 'Mytable.location',
),
'conditions' => array('Mytable.id =' => '(SELECT MAX(id) FROM myTable t2 WHERE myTable.nick = t2.nick)', 'Mytable.id <=' => 100)
));

关于php - CakePHP 数据库查询 DISTINCT/GROUP BY 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12149156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com