2016-07-14 82 views
1

這是使用Joomla數據庫類,但希望這是有道理的。我需要根據特定的日期範圍返回最大日期和最短日期。我遇到的問題是,我還需要每個日期的version_id。我寫的查詢只返回最大日期值的版本。我想最終得到的是最短日期和最短日期值的版本ID以及最大日期和最大日期值的版本ID。我認爲這可能是一個工會的情況,但我不知道如何。MYSQL的MAX MIN日期範圍

$query->select('a.ucm_type_id, a.ucm_item_id, a.version_id, MIN(a.save_date), MAX(a.save_date)') 
    ->from($db->quoteName('#__ucm_history') . ' AS a') 
    ->where('a.save_date BETWEEN ' . $db->quote($from_date) . ' AND ' . $db->quote($to_date)) 
    ->where('a.ucm_type_id IN (' . implode(',',$db->quote($content_type_ids)) . ')') 
    ->group(array('a.ucm_type_id', 'a.ucm_item_id',)); 
    // Join over the users for the checked out user. 
    $query->select('b.type_title AS type') 
    ->join('LEFT', '#__content_types AS b ON b.type_id=a.ucm_type_id'); 

    $db->setQuery($query); 
+0

先找出查詢。然後擔心如何重新設計以適應Joomla – Strawberry

+0

這是我的計劃,在那裏寫的查詢在Joomla工作,但它不是正確的查詢。這是我需要幫助的。 –

回答

2

您的查詢只符合SQL標準,如果version_id領域在功能上是依賴於ucm_type_iducm_item_id。 MySQL在某些sql模式設置下允許查詢經歷,這可能導致一些令人討厭的驚喜,因爲version_id的值是不確定的。 Fortunatley在最近的mysql版本中默認關閉這個模式。

您需要在子查詢中獲取日期範圍內的最大和最小日期,並將其加入原始表中以獲取與這些日期關聯的其他字段。

在SQL查詢看起來像SG如下:

select a.ucm_type_id, 
     a.ucm_item_id, 
     a.version_id, 
     a.save_date, 
     if(a.save_date=t1.min_save_date, 'min','max') as min_or_max, 
     b.type_title AS type 
from `#__ucm_history` a 
inner join 
    (select `ucm_type_id`, `ucm_item_id`, MIN(save_date) as min_save_date, MAX(save_date) as max_save_date 
    from `#__ucm_history` 
    where ucm_type_id IN (...) 
      and save_date BETWEEN ... and ... 
    group by `ucm_type_id`, `ucm_item_id` 
    ) t1 on a.ucm_type_id=t1.ucm_type_id and a.ucm_item_id=t1.ucm_item_id 
left join `#__content_types` AS b ON b.type_id=a.ucm_type_id 
where a.save_date=t1.min_save_date or a.save_date=t1.max_save_date 

與參數從PHP代碼來替換...部分。

在sql環境中測試並調整您的查詢,一旦您滿意,然後使用您的ORM工具實現它。但我的猜測是,你需要將它作爲一個原始的sql語句來運行。

+0

完美的作品謝謝你!我還有一個問題,如果只有最大值和最小值,是否可以返回?如果有兩個共享相同的ucm_type和ucm_id的version_id, –

+1

如果至少有一條ucm_type_id和ucm_item_id對的記錄,那麼您將擁有最大值和最小值。最大值和最小值可能是相同的,但兩者都會在那裏,或者都不是。 – Shadow

+0

對不起,我沒有解釋得很好,是否可以將它加載到同一個對象中:ucm_type_id,ucm_item_id,min_version_id,max_version_id,min_save_date,max_save_date? –