다음과 같은 MySQL 쿼리를 가지고 있습니다. 그리고 결과 쿼리를 분석하여 코드가 실패한 곳을 파악하려고합니다. twitter_status_tags
또는twitter_user_tags
에 tag_id이 곳MySQL 쿼리가 OR 대신에 OR 대신에
쿼리는 모든 twitter_statuses를 선택해야하지만, 현재는 twitter_status_tags
및twitter_user_tags
에 tag_id이 모든 twitter_statuses을 반환합니다.
내가 알 수있는 한, 아래 쿼리는 OR을위한 것이지만, 분명히 MySQL은 그렇지 않다고 생각합니다. 관심이있는 사람들을 위해
SELECT *
FROM `project_twitter_statuses`
INNER JOIN `twitter_statuses`
ON `twitter_statuses`.`id` =
`project_twitter_statuses`.`twitter_status_id`
INNER JOIN `twitter_user_tags`
ON `twitter_user_tags`.`twitter_user_id` =
`twitter_statuses`.`twitter_user_id`
INNER JOIN `twitter_status_tags`
ON `twitter_status_tags`.`twitter_status_id` =
`twitter_statuses`.`id`
WHERE `project_twitter_statuses`.`deleted_at` IS NULL
AND (`twitter_user_tags`.`tag_id` IN ('3', '6', '8', '12')
OR `twitter_status_tags`.`tag_id` IN ('3', '6', '8', '12'))
GROUP BY `twitter_statuses`.`id`
ORDER BY `twitter_statuses`.`datetime` ASC;
, 이것은 당신이 외부 아무것도 얻을 조인하려면, 당신에게 미치는 영향을주고있다
$projectTwitterStatuses = ProjectTwitterStatus::join('twitter_statuses','twitter_statuses.id','=','project_twitter_statuses.twitter_status_id');
// Tags
if(!empty($tagsSelectedArray)) {
$projectTwitterStatuses = $projectTwitterStatuses
->join('twitter_user_tags','twitter_user_tags.twitter_user_id','=','twitter_statuses.twitter_user_id')
->join('twitter_status_tags','twitter_status_tags.twitter_status_id','=','twitter_statuses.id')
->where(function($query) use ($tagsSelectedArray)
{
$query->orWhereIn('twitter_user_tags.tag_id',$tagsSelectedArray)
->orWhereIn('twitter_status_tags.tag_id',$tagsSelectedArray);
})
->groupBy('twitter_statuses.id');
}
$projectTwitterStatuses = $projectTwitterStatuses->orderBy('twitter_statuses.datetime')
->paginate(10);
테이블이 서로 어떻게 관련되어 있는지 알 수 있습니까? Eloquent를 사용하여 테이블을 연결할 수 있습니까? –
응답이 늦어 져서 죄송합니다. 나는 그것을 모델 관계를 사용하여 작동시킬 수 있었다. 그러나 이러한 솔루션은 데이터 검색 속도를 크게 저하시킵니다. 그래서 나는 어떤 경우에 테이블을 사용하기로 되돌아 갔다. 나는 curently 그것을 사용하여 끝내려고 노력하고 있어요. 내 응답이 지연되어서 죄송합니다. –