我在我的项目中使用 CodeIgniter,这是我在模型中的代码
public function group_all_ville(){
$this->db->select('*');
$this->db->from('departement');
$this->db->join('villes', 'villes.num_dept = departement.num_dept');
$this->db->group_by('nom_dept');
$query = $this->db->get();
return $query->result();
}
Run Code Online (Sandbox Code Playgroud)
这是执行后的错误
A Database Error Occurred
Error Number: 1055
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'pneu.departement.id_dept' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
SELECT * FROM `departement` JOIN `villes` ON `villes`.`num_dept` = `departement`.`num_dept` GROUP BY `nom_dept`
Filename: C:/wamp64/www/pneu/system/database/DB_driver.php
Line Number: 691
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的方法,但没有任何结果。谢谢
我有这个脚本,我习惯于为动态结果做一个简单的投影
SELECT
M.nom_utilisateur,
SUM(M.montant_bulletin ) as Montant_Total_BS,
SUM(M.montant_payer ) as Montant_Total_payer,
COUNT(M.ref_bs ) as nbr_bs_total,
(SELECT COUNT(*) FROM mutuelle_bi.`Mutuelle` WHERE nom_utilisateur = M.nom_utilisateur AND (M.nom_assurence = "Star" AND M.etat_bs = "Remboursé")) as nbr_bs_total_payer,
(SELECT COUNT(*) FROM mutuelle_bi.`Mutuelle` WHERE nom_utilisateur = M.nom_utilisateur AND (M.nom_assurence = "Star" AND M.etat_bs = "Non remboursé")) as nbr_bs_non_payer,
(SELECT COUNT(*) FROM mutuelle_bi.`Mutuelle` WHERE nom_utilisateur = M.nom_utilisateur AND (M.nom_assurence = "Star" AND M.etat_bs = "En cours")) as nbr_bs_en_cours,
(SELECT COUNT(*) FROM mutuelle_bi.`Mutuelle` WHERE nom_utilisateur = M.nom_utilisateur AND …Run Code Online (Sandbox Code Playgroud) 我正在使用 Laravel 5.5 我添加了这个依赖项来制作简单的搜索引擎
https://github.com/nicolaslopezj/searchable
但是当我尝试搜索任何东西时遇到问题
SQLSTATE[42000]: Syntax error or access violation: 1055 'myreview.movies.name' isn't in GROUP BY (SQL: select count() as aggregate from (select movies., max((case when LOWER(movies.name) LIKE car then 150 else 0 end) + (case when LOWER(movies.name) LIKE car% then 50 else 0 end) + (case when LOWER(movies.name) LIKE %car% then 10 else 0 end) + (case when LOWER(movies.description) LIKE car then 150 else 0 end) + (case when LOWER(movies.description) LIKE car% then 50 else 0 end) …
我有这样的Post模型:
class Post extends Model
{
protected $primaryKey = 'post_id';
public function tags ()
{
return $this->belongsToMany('App\Tag');
}
}
Run Code Online (Sandbox Code Playgroud)
和Tag模型:
class Tag extends Model
{
public function posts ()
{
return $this->belongsToMany('App\Post');
}
public function tagsCount ()
{
return $this->belongsToMany('App\Post')
->selectRaw('count(pt_id) as count')
->groupBy('tag_id');
}
public function getTagsCountAttribute()
{
if ( ! array_key_exists('tagsCount', $this->relations)) $this->load('tagsCount');
$related = $this->getRelation('tagsCount')->first();
return ($related) ? $related->count : 0;
}
}
Run Code Online (Sandbox Code Playgroud)
(pt_id列是post_tag数据透视表中的主键字段).
如您所见,和Models 之间存在ManyToMany关系.Post …
即使我将设置"严格"设置为false,laravel 5.5 group by on single column也不起作用..我已经在mysql工作台中尝试了原始查询并且它工作正常但是我在laravel上有这个错误:
SQLSTATE[42000]: Syntax error or access violation: 1055 'hammer.vehicle.consignor_id' isn't in GROUP BY (SQL: select `vehicle`.*, `vehicle_brand`.`vehicle_brand_name`, `vehicle_model`.`vehicle_model_name`, `vehicle_variant`.`vehicle_variant_name`, `vehicle_model`.`year`, `vehicle`.`vehicle_id` from `vehicle` left join `vehicle_brand` on `vehicle_brand`.`vehicle_brand_id` = `vehicle`.`vehicle_brand_id` left join `vehicle_model` on `vehicle_model`.`vehicle_brand_id` = `vehicle_brand`.`vehicle_brand_id` left join `vehicle_variant` on `vehicle_variant`.`vehicle_model_id` = `vehicle_model`.`vehicle_model_id` group by `vehicle`.`vehicle_id` limit 10 offset 0)
Run Code Online (Sandbox Code Playgroud)
这是导致错误的laravel代码
\DB::table('vehicle')
->select('vehicle.*', 'vehicle_brand.vehicle_brand_name', 'vehicle_model.vehicle_model_name', 'vehicle_variant.vehicle_variant_name', 'vehicle_model.year', 'vehicle.vehicle_id')
->leftJoin('vehicle_brand', 'vehicle_brand.vehicle_brand_id', '=', 'vehicle.vehicle_brand_id')
->leftJoin('vehicle_model', 'vehicle_model.vehicle_brand_id', '=', 'vehicle_brand.vehicle_brand_id')
->leftJoin('vehicle_variant', 'vehicle_variant.vehicle_model_id', '=', 'vehicle_model.vehicle_model_id')
->where($where)
->groupBy('vehicle.vehicle_id')
->paginate(10); …Run Code Online (Sandbox Code Playgroud) $search_alls=
DB::table('a16s as A')
->select('A.id')
// ->select('A.*')
->addSelect(DB::raw('SUM(CASE WHEN B.approve = 1 ELSE 0 END) as Yshow'))
->leftjoin('a16s_likes as B', function($join) {
$join->on('A.id', '=', 'B.p_id');
})
->groupBy('A.id')
->get();
Run Code Online (Sandbox Code Playgroud)
当我使用上面的 select('A.id') 时效果很好。
但是当我使用 select('A.*') 选择所有 A 列时,出现错误
SQLSTATE[42000]: Syntax error or access violation: 1055 'employee.A.name' isn't in GROUP BY
Run Code Online (Sandbox Code Playgroud)
PS:employee是我的数据库名称A表上的列是
id name ....
1 john
2 mary
3 susan
Run Code Online (Sandbox Code Playgroud)
如何通过 leftjoin 选择所有列?A.id 列与 B.p_id 列是一对多关系。
在我的表中,我有按timestamp. 我想返回一个具有最高timestamp.
这有效:
SELECT max(`timestamp`) FROM `messages`
Run Code Online (Sandbox Code Playgroud)
但是,它只返回timestamp值。所以我也尝试选择该message值:
SELECT max(`timestamp`), `message` FROM `messages`
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'database.messages.message'; this is incompatible with sql_mode=only_full_group_by
Run Code Online (Sandbox Code Playgroud)
所以我添加了一个 GROUP BY:
SELECT max(`timestamp`), `message` FROM `messages`
GROUP BY `message`
Run Code Online (Sandbox Code Playgroud)
然而,这最终会返回表中的每个值。
我知道 GROUP BY 应该统一相同的条目,我完全不知道为什么在这种情况下我被迫使用它以及如何获取最新的条目而不是所有条目。
我想执行一个查询,仅选择给定组中的最新项目。
在此示例中,我正在跟踪货车:
check-in都会记录信息 - 里程等......delivery都会记录客户等......该表让我们了解给定的历史记录van。数据可以通过查询生成或随时存储 - 这不是问题。
id | checkin_id | delivery_id | van_id
----+------------+-------------+--------
24 | 15 | NULL | 3
25 | NULL | 28 | 3
26 | 16 | NULL | 4
27 | NULL | 29 | 3
28 | NULL | 30 | 4
29 | 17 | NULL | 5
Run Code Online (Sandbox Code Playgroud)
我可以通过使用 - 查询来查看货车的历史记录 ... WHERE van_id=3;。
相反,我希望能够获得vans他们最近的“事件”的列表。结果是这样的:
id | checkin_id …Run Code Online (Sandbox Code Playgroud) mysql ×8
laravel ×4
php ×4
group-by ×3
laravel-5.5 ×2
codeigniter ×1
join ×1
laravel-5.3 ×1
left-join ×1
sql ×1
sql-limit ×1
sql-order-by ×1