2015-04-19 123 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

相关问题