2015-04-19 139 views
-1

我知道通過從表中獲取數據,操縱它並重新插入它是可能的,我問的是如果有查詢可以做到這一點。如何按數據庫中的列對列進行排序?

例如,數據庫是db.db中的表狗。該表具有列ID,品種,年齡,在該ID中的名稱是主鍵和自動遞增(但是爲了找到一個好的解決方案,可以改變這個主鍵假設)。

我周圍中搜索了很多,但所有地方說同樣的話,只是這樣做:

$db->query("SELECT breed, age, name FROM Dogs ORDER BY Age DESC"); 

但是,正如我曾說過,我要對錶進行排序。這種解決方案適用於結果集,而不是表格本身,這就是我提出這個問題的原因。

更新:我具有誤導,上面寫着我的問題不正確制定它的人對不起,我打算在排序基於年齡列,但ID列所有列可以保持不變,有沒有什麼幫助,這正是我想改變主要關鍵假設時所說的,但它出錯了。

UPDATE2發現,這個問題恰好地對待計算器另一個問題,答案排序的匹配已經由用戶奎姆卡爾佩給我的答案,那就是,創建另一個表,做的東西在那裏,然後將它複製到原始表中,現在問題變成了,是不是有更好的方法來做到這一點,而不涉及創建另一個表?我認爲如果表格非常大,可以完成所有這些操作,而不是讓數據庫系統以它自己的方式處理它,如果它有一個是...

+0

所以你想重新排序你的錶行,基於'Age'?是否有一個原因?通常情況下,您不必擔心訂單,直到您需要結果。 – Sean

+3

爲什麼要排序表,而不是查詢的結果?數據庫不會將數據存儲在磁盤上的排序序列中,而是提供SQL「ORDER BY」子句以用於訂購查詢結果 –

+0

@MarkBaker什麼[quick](https://stackoverflow.com/questions/ 16622509/how-to-arrange-rows-of-a-table-in-as-order-and-to-save-the-table-simultan)[research](https://stackoverflow.com/questions/725717/默認排序順序在mysql-alter-table-order-by)顯示他們**可以**排序,但表和提取**都不保證**順序(除非使用'ORDER BY' ) – kero

回答

1

你可以做是這樣的:

<?php 
$db->query("CREATE TABLE DogsSortedByAge LIKE Dogs"); 
$db->query("INSERT INTO DogsSortedByAge SELECT * FROM Dogs ORDER BY Age DESC"); 

但是你沒有保證數據將被責令在磁盤上這樣...

想不到你所問的一個有效的使用案例.. 。

+0

在獲得了合適的響應之後,我期望根據它排序除ID號之外的所有行,然後我可以通過數字ID來引用由Age定義的列,這是我正在考慮的用例,因爲我只能按有序Age訪問表,但實際上我永遠不會實際使用Age列,但ID列而不是。爲了解釋這一點,我將重新闡述我的問題。 – wxiiir

+0

如果目標列是除ID列之外的所有列,您是否可以找到一種不涉及創建新表的更好方法?謝謝。 – wxiiir

+0

謝謝你的幫助。不幸的是,它不會幫助我進一步,因爲我爲了我的精神健康而離開這個PDO/SQL廢話。我受夠了。上週我測試瞭如果我的CMS是如何處理一個合適的數據庫而不是使用php數組和東西的平面文件的話。據說有知識的人告訴我試試看。數據庫具有更好的性能,並且操作起來非常簡單和靈活。我的代碼現在比同等的flatfile /數組代碼大得多,因爲我必須繼續找到黑客做數組和平面文件,這是荒謬的。 // End_rant – wxiiir

相關問題