그래서 쿼리에서 고유 한 pid의 수를 가져 오려고하는데 반환 된 값이 잘못되었습니다.
이것이 내가하려는 것입니다.
$ad->getcodes()->groupby('pid')->distinct()->count()
값 “2”를 리턴하는 것은 리턴해야하는 값이 “1”이어야합니다.
해결 방법으로 다음을 수행합니다.
count($ad->getcodes()->groupby('pid')->distinct()->get())
잘 작동하고 “1”을 반환하는 것
개수와 구별이 동일한 쿼리에있을 수없는 규칙이 있습니까? “무거움”의 해결 방법을 찾았습니다. 원래 쿼리가 작동하도록 만들고 싶습니다.
답변
다음이 작동합니다.
$ad->getcodes()->distinct('pid')->count('pid');
답변
저와 다른 사람들을 절약 할 수있는보다 일반적인 답변 :
작동하지 않음 (모든 행의 수를 반환) :
DB::table('users')
->select('first_name')
->distinct()
->count();
수정 사항 :
DB::table('users')
->distinct()
->count('first_name');
답변
다른 사람이이 게시물을보고 다른 제안을 찾지 못하셨습니까?
특정 쿼리에 따라 다른 접근 방식이 필요할 수 있습니다. 제 경우에는 GROUP BY
, 예를 들어
SELECT COUNT(*) FROM (SELECT * FROM a GROUP BY b)
또는 사용 COUNT(DISTINCT b)
:
SELECT COUNT(DISTINCT b) FROM a
약간의 수수께끼 끝에 나는 이들 중 하나에 내장 된 Laravel 함수가 없다는 것을 깨달았습니다. 따라서 가장 간단한 해결책은 방법을 사용하는 것 DB::raw
입니다 count
.
$count = $builder->count(DB::raw('DISTINCT b'));
groupBy
전화하기 전에 사용하지 마십시오 count
. groupBy
행을 가져 오는 데 필요한 경우 나중에 신청할 수 있습니다 .
답변
비슷한 문제가 있었고 해결 방법을 찾았습니다.
문제는 Laravel의 쿼리 빌더가 집계를 처리하는 방식입니다. 반환 된 첫 번째 결과를받은 다음 ‘집계’값을 반환합니다. 일반적으로 괜찮지 만 count를 groupBy와 결합하면 그룹화 된 항목 당 개수를 반환합니다. 따라서 첫 번째 행의 집계는 첫 번째 그룹의 개수 일뿐입니다 (따라서 1 또는 2와 같이 낮은 값일 가능성이 높습니다).
그래서 Laravel의 개수는 나오지 않았지만 Laravel 쿼리 빌더를 원시 SQL과 결합하여 그룹화 된 결과의 정확한 개수를 얻었습니다.
귀하의 예를 들어, 다음이 작동 할 것으로 예상합니다 (그리고 얻을 수 없도록).
$query = $ad->getcodes()->groupby('pid')->distinct();
$count = count(\DB::select($query->toSql(), $query->getBindings()));
모든 열을 선택하는 데 시간을 낭비하지 않으려면 쿼리를 작성할 때이를 피할 수 있습니다.
$query = $ad->select(DB::raw(1))->getcodes()->groupby('pid')->distinct();
답변
나는 같은 문제를 만났다.
laravel 디버그 바를 설치하면 쿼리를 볼 수 있고 종종 문제를 볼 수 있습니다.
$ad->getcodes()->groupby('pid')->distinct()->count()
로 변경
$ad->getcodes()->distinct()->select('pid')->count()
고유 한 것으로 반환 할 값을 설정해야합니다. 선택 필드를 설정하지 않으면 데이터베이스의 모든 열이 반환되고 모두 고유합니다. 따라서 쿼리를 구분으로 설정하고 더 추가하려는 ‘고유’값을 구성하는 열만 선택하십시오. ->select('pid','date')
사용자의 모든 고유 한 값을 하루에 얻으려면
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)