检查列是否已分组(QueryBuilder)
Check if column was grouped (QueryBuilder)
我有以下查询:
$qb
->select('z')
->where($qb->expr()->orX(
$qb->expr()->like('z.city', ':czRequest')
))
->groupBy('z.city')
->setParameter('czRequest', $cz . '%');
使用 $cz = 'Ber'
我得到一个这样的数组:
array:3 [
0 => array:4
[ "id" => 12899 "country" => "DE" "city" => "Berlin" "code" => 14199 ]
1 => array:4
[ "id" => 6483 "country" => "DE" "city" => "Berlingen" "code" => 54570 ]
2 => array:4
[ "id" => 8438 "country" => "DE" "city" => "Berlingerode" "code" => 37339 ]
]
现在'Berlin'给出了不止一个(zip)'code',在这个例子中'14199'显然只是最后一个。 'Berlingen'另一方面只有一个代码。
有没有什么方法可以改变查询,使我有 'various' 而不是 '14199' 但保留其他的?
它不必在查询本身中,我认为查询可能是 'foreach'(w/out groupBy)并检查重复的城市?
感谢任何提示!
你应该能够满足你的需求:
$qb
->select('z, CASE WHEN (COUNT(z)) > 1 THEN \'various\' ELSE z.code END AS code2')
->where($qb->expr()->orX(
$qb->expr()->like('z.city', ':czRequest')
))
->groupBy('z.city')
->setParameter('czRequest', $cz . '%');
您必须计算您的结果(对于分组依据),并且根据计数,您可以切换为名称或其他名称。
我有以下查询:
$qb
->select('z')
->where($qb->expr()->orX(
$qb->expr()->like('z.city', ':czRequest')
))
->groupBy('z.city')
->setParameter('czRequest', $cz . '%');
使用 $cz = 'Ber'
我得到一个这样的数组:
array:3 [
0 => array:4
[ "id" => 12899 "country" => "DE" "city" => "Berlin" "code" => 14199 ]
1 => array:4
[ "id" => 6483 "country" => "DE" "city" => "Berlingen" "code" => 54570 ]
2 => array:4
[ "id" => 8438 "country" => "DE" "city" => "Berlingerode" "code" => 37339 ]
]
现在'Berlin'给出了不止一个(zip)'code',在这个例子中'14199'显然只是最后一个。 'Berlingen'另一方面只有一个代码。
有没有什么方法可以改变查询,使我有 'various' 而不是 '14199' 但保留其他的? 它不必在查询本身中,我认为查询可能是 'foreach'(w/out groupBy)并检查重复的城市?
感谢任何提示!
你应该能够满足你的需求:
$qb
->select('z, CASE WHEN (COUNT(z)) > 1 THEN \'various\' ELSE z.code END AS code2')
->where($qb->expr()->orX(
$qb->expr()->like('z.city', ':czRequest')
))
->groupBy('z.city')
->setParameter('czRequest', $cz . '%');
您必须计算您的结果(对于分组依据),并且根据计数,您可以切换为名称或其他名称。