[英]Complex Filtering of Relations in Yii1
目前,我遇到了一個無法優雅解決的問題。 給出了這個(簡化的)DB設計
每個視頻都有許多統計信息。 到目前為止,這是一個正常的1-n關系,但是存在一些約束。
我想獲取渴望加載其當前統計信息的n個視頻。 一次視頻只有* n個當前統計信息,其中n是具有相同video_id的統計信息的指標數量(不同metric_id )*
為此,我發現唯一可能的解決方案是一個非常復雜的查詢,如下所示:
SELECT `end`, `id`, `name`, `metric_id`, `value` FROM `video`
JOIN (
SELECT `start`, `end`, `video_id`, `metric_id`, `value`
FROM (
SELECT `start`, `end`, `video_id`, `metric_id`, `value`
FROM `stat`
WHERE `video_id` = 1
ORDER BY `end` DESC
) stats
GROUP BY `video_id`, `metric_id`
) stats ON stats.video_id = video.id
WHERE `video_id` = 1
這被簡化了(因為我只查詢一個視頻。在完成的解決方案中,我想將其理解為所有或多個視頻)。
end
日期降序排列給定視頻(因為我只需要視頻的最新統計信息)。 因此,對於該關系需要進行一些非常復雜的過濾。 我仍然想充分利用Yii的Active Record和Eager Load。
是否有任何辦法可以“鈎住”關系連接過程(就像更現代的框架一樣),或者有什么我可以簡化但被我忽略的事情嗎?
如果您正確設置了關系,那么哪個gii會自動執行該關系,那么您可以執行以下操作;
$stats = Stat::model()->findAllByAttributes(array('video_id' => 1), array('order' => 'end DESC'));
訪問記錄和父表記錄
foreach $stat as $stats {
$stat->start;
$stat->end;
// Parent table records can be accessed like so
$stat->video->name
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.