2010-05-03 68 views
1

我有一個表結構讓我從選擇查詢在下面給出的條件的最新變化

ID,的TrackID,TABLE_NAME操作, OLDVALUE,NEWVALUE,場, changedonetime

現在,如果我有3行爲相同的「trackid」相同的「字段」,那麼我如何選擇最新的三個?

即用於例如:

ID = 100 的TrackID = 152 表名 = jos_menu 操作 = UPDATE OLDVALUE = IPL NEWVALUE = IPLcccc 字段 =名稱直播 = 0 changedonetime = 2010-04-30十七點54分39秒

ID = 101 的TrackID = 152 表名 = jos_menu 操作 = UPDATE oldvalue = IPLcccc 新值 = IPL2222 =名稱現場 = 0 changedonetime = 2010-04-30 18點54分39秒

就像你看到的secind入口上方是最新的變化, 現在什麼查詢我應該用它來獲得唯一的一個,最新的排出來很多這樣的行...

$distupdqry = "select DISTINCT trackid,table_name from jos_audittrail where live = 0 AND operation = 'UPDATE'"; 
$disupdsel = mysql_query($distupdqry); 
$t_ids = array(); 
$t_table = array(); 
while($row3 = mysql_fetch_array($disupdsel)) 
{ 
$t_ids[] = $row3['trackid']; 
$t_table[] = $row3['table_name']; 
//$t_table[] = $row3['table_name']; 
} 

//echo "<pre>";print_r($t_table);echo "<pre>"; 

//exit; 
for($n=0;$n<count($t_ids);$n++) 
{ 

    $qupd = "SELECT * FROM jos_audittrail WHERE operation = 'UPDATE' AND trackid=$t_ids[$n] order by changedone DESC "; 
$seletupdaudit = mysql_query($qupd); 
$row4 = array(); 
$audit3 = array(); 
while($row4 = mysql_fetch_array($seletupdaudit)) 
{ 
    $audit3[] = $row4; 
} 


    $updatefield = ''; 
    for($j=0;$j<count($audit3);$j++) 
    { 
    if($j == 0) 
    { 

    if($audit3[$j]['operation'] == "UPDATE") 
    { 
     //$insqry .= $audit2[$i]['operation']." "; 
     //echo "<br>"; 
    $updatefield .= "UPDATE `".$audit3[$j]['table_name']."` SET "; 

    } 
    } 

    if($audit3[$j]['operation'] == "UPDATE") 
    { 

    $updatefield .= $audit3[$j]['field']." = '".$audit3[$j]['newvalue']."', "; 

    } 

    } 
    /*echo "<pre>"; 
print_r($audit3); 
exit;*/ 
    $primarykey = "SHOW INDEXES FROM `".$t_table[$n]."` WHERE Key_name = 'PRIMARY'"; 
    $prime = mysql_query($primarykey); 
    $pkey = mysql_fetch_array($prime); 
    $updatefield .= "]"; 
    echo $updatefield = str_replace(", ]"," WHERE ".$pkey['Column_name']." = '".$t_ids[$n]."'",$updatefield); 
} 

在上面的代碼,我取甌不同的ID在更新操作已完成,然後相應的查詢進行燒製,獲取所有更改在選定的獨特id的不同字段上完成... 在這裏,我通過從最初描述的表中提取記錄來創建更新查詢,這裏提到的是audittrail表... 因此,我需要在現場進行最後一次更改因此只有最新的變化可以在我用select查詢選擇...

請到通過代碼..看看如何才能讓需要的變化,我終於需要..

回答

2

這是另一種在堆棧溢出中每週出現幾次的每組最大的問題。

以下是我想解決這個問題,你的情況:

SELECT j1.* 
FROM jos_audittrail j1 LEFT OUTER JOIN jos_audittrail j2 
    ON (j1.trackid = j2.trackid AND j1.field = j2.field 
    AND j1.changedonetime < j2.changedonetime) 
WHERE j2.id IS NULL; 
+0

感謝比爾爲指導 – 2010-05-03 06:45:21

+0

感謝BILLLION BILL它的工作..... :) – 2010-05-03 06:54:43