2014-07-22 65 views
0

在我的Mysql數據庫中,我有一列名爲notesUpdate的列,其中我用日期,用戶名和備註插入了許多數據。因此,notesUpdate列保存了以下數據。使用一列的ORDER BY顯示來自Mysql數據庫的數據

2014-07-23 04:01 AM alex : First Note{ASUSIBBIR} 
2014-07-23 04:01 AM alex : Second Note{ASUSIBBIR} 
2014-07-23 04:02 AM alex : Third Note{ASUSIBBIR} 
2014-07-23 04:02 AM alex : Fourth Note{ASUSIBBIR} 

注: {} ASUSIBBIR是我使用的分隔符。

現在我試圖以降序獲取這些數據。我的意思是最後插入的數據應該在First。所以我使用以下查詢。我知道這是不正確的,但不知道如何以降序顯示這些數據?

$query = mysql_query("SELECT notesUpdate FROM contact_details WHERE cdid = '$id' ORDER BY 
notesUpdate DESC"); 

數據顯示應該是這個樣子的:

2014-07-23 04:02 AM alex : Fourth Note 
2014-07-23 04:02 AM alex : Third Note 
2014-07-23 04:01 AM alex : Second Note 
2014-07-23 04:01 AM alex : First Note 

我如何將數據插入到DB

$username = $_SESSION['front_username']; 
$contetn = $date; 
$contetn .= " "; 
$contetn .= "$username"; 
$contetn .= " : "; 
$contetn .= mysql_real_escape_string(htmlspecialchars(trim($_POST['contentText']))); 
$cdid = $_POST['cdid']; 
$contetn .= "{ASUSIBBIR}"; // this is a separator 
$query = mysql_query("UPDATE contact_details SET notesUpdate = CONCAT(notesUpdate, 
'$contetn') WHERE cdid = '$cdid' LIMIT 1") 

任何幫助嗎?

更新:

這是我插入數據到數據庫的形式:

<table width="100" border="0" cellspacing="0" cellpadding="0"> 
<tr> 
    <td><h2>Write your Notes</h2></td> 
    </tr> 
    <input type="hidden" value="<?php echo $id; ?>" name="cdid" id="cdid"/> 
    <tr> 
    <td><textarea name="contentText" id="contentText" cols="53" rows="5"></textarea></td> 
    </tr> 
    <tr><td>&nbsp;</td></tr> 
    <tr> 
    <td><input type="submit" value="Save" name="submit" class="submit" id="addNewNotes"/></td> 
    </tr> 
</table> 

這是jQuery的部分:

$(document).ready(function() { 
    $('body').on('click', '#addNewNotes', function(e){ 
     e.preventDefault(); 
     var formData = new FormData($(this).parents('form')[0]); 

     var cid=$(this).parents('form:first').find('#cdid').val(); 
     $("#loading-image").show(); 

     $.ajax({ 
      url: 'response.php', 
      type: 'POST', 
      xhr: function() { 
       var myXhr = $.ajaxSettings.xhr(); 
       return myXhr; 
      }, 
      success: function(data){            
       getDetails(cid); 
       $("#loading-image").hide(); //hide loading 
       $("#Notesboxsuccess").html(data).show();   
      }, 

     // complete: function(){ 
     // $("#loading-image").hide(); //hide loading here 
     //}, 

      data: formData, 
      cache: false, 
      contentType: false, 
      processData: false 
     }); 
}); 

}); 
+0

你想說什麼,當您運行查詢? – afaolek

+0

您應該將時間戳存儲在數據類型爲「TIMESTAMP」或「DATETIME」的單獨列中。然後你可以訂購這個專欄。因爲你省略了你的秒數,所以你不能在「Third」之前輕鬆地命令「Fourth」。這是與數據庫有關的常見原理:存儲原子數據。您的專欄至少存儲了兩種不同的信息,現在您遇到了問題。 – VMai

+0

@VMai是的你沒錯。但是沒有辦法得到這個? – Shibbir

回答

0

我建議選擇notesUpdate把它分解爲一個數組,然後倒着dispay :)但是,你應該考慮使用一些相對錶databese存儲變化的歷史。

$result = mysql_query("SELECT notesUpdate FROM contact_details WHERE cdid = '$id'"); 
$row = mysql_fetch_assoc($result); 
$notesUpdateArray = explode('{ASUSIBBIR}', $row['notesUpdate']); 
$notesUpdateReversedArray = array_reverse($notesUpdateArray); 


var_dump($notesUpdateReversedArray); 

如果你不會它作爲字符串只是implod回來

$notesUpdateReversed = implode('{ASUSIBBIR}', $notesUpdateReversedArray); 
+0

所以我要回顯這個變量'$ notesUpdateReversedArray'? – Shibbir

+0

@Shibbir $ notesUpdateReversedArray是一個數組,所以如果你想使用回聲,你需要通過所有元素,或者只是使用:echo $ notesUpdateReversed,這已經是字符串 – marcino0o

+0

現在我使用這個變量'$ notesUpdateReversed',它顯示'{ASUSIBBIR} 2014-07-23 04:02 AM alex:第四注{ASUSIBBIR} 2014-07-23 04:02 AM alex:第三注{ASUSIBBIR} 2014-07-23 04:01 AM alex:Second Note {ASUSIBBIR} 2014- 07-23 04:01 AM alex:First Note' – Shibbir

0

,就可以把前19個字符作爲日期時間對象,如

CAST(LEFT(notesUpdate, 19) as datetime) 

所以像

SELECT 
    notesUpdate 
FROM contact_details 
ORDER BY 
    STR_TO_DATE(LEFT(notesUpdate, 19), '%Y-%m-%d %l:%i %p') DESC, 
    id DESC 

注:這不是一個推薦的方式來存儲數據..你應該考慮改變它..這不遵循規範化的標準。

查閱DEMO

+0

有問題,沒有秒,所以(第一,第二)和(第三,第四)可能會被排序錯誤。那不是你的錯:-) – VMai

+0

@John Ruddell讓我試試看。 – Shibbir

+0

@VMai我注意到,因爲我只是試圖測試它..所以我添加了一個ID DESC排序假設有一個ID字段..修復它在我身邊:) –

相關問題