作爲一段laravel代碼的結果,我有以下MySQL查詢。我試圖通過分析結果查詢來找出代碼失敗的地方。在MySQL查詢中雙或在哪裏並且或者是
查詢應選擇所有twitter_statuses那裏是在twitter_status_tags
或twitter_user_tags
一個TAG_ID,但目前它返回所有那裏是在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;
對於那些有興趣誰,這是我laravel應用程序代碼
$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來完成嗎? –
對不起,延遲應對。我設法使用模型關係來實現它。但是,這種解決方案會大大減慢數據的檢索速度。所以我在一些情況下恢復使用表格。我正在嘗試使用'where has'完成它' –