2009-09-28 72 views
1

我想知道哪些是使用PHP和MySQL对表列进行排序的最佳方法。有没有办法做到这一点,而不必设置像下面这样的变量?用PhP和MySQL对列进行排序的最佳方法是什么?

$strASC = $_GET["order"]; 

if ($strASC == "ASC") 
{ 
    $strASC = "DESC"; 
} 

或确实存在一个SQL查询,根据当前状态反转ASC或DESC?

回答

3

。该数据库不会重新排列表中的数据,因此它不知道它当前处于哪个“状态”。

在您的示例中,还要注意SQL注入。

+0

感谢您指出注入 – 2009-09-28 20:18:14

+0

你会如何避免注入这样的事情? – 2009-09-30 17:05:33

+0

转义查询字符串的内容使用: $ strADC = mysql_real_escape_string($ _ GET [“order”]) – AdamW 2009-10-01 16:52:19

0

仅使用PHP和数据库,我认为没有更好的方法可以做到这一点。

但是,如果你想尝试使用JavaScript而不运行另一个查询,你可以看看jquery和tablesorter

1

没有mysql不会自动执行它。 当你从一个数据库,它是在您指定的顺序的结果集U可以减少它虽然

$strASC = $_GET['order']=='ASC'?'DESC':'ASC'; 
+0

这是不真的是一个非常可读的符号。如果你想使用它,至少写($ _GET ['order'] =='ASC)? 'DESC':'ASC'; – markus 2009-09-28 19:50:59

+0

tharkun,这是分裂头发。它是完全可读的。 – brianreavis 2009-09-28 19:57:20

+0

如果你不能阅读这个简单的陈述,你是错误的业务,在这种情况下,父母只会混乱更多的代码,imo – NDM 2009-09-28 20:23:30

3

有特别没有功能翻转的排序顺序,但你可以做这样的事情:

$sortDir = $_GET['order'] == 'ASC' ? 'DESC' : 'ASC'; 
mysql_query('SELECT * FROM table ORDER BY col ' . $sortDir); 
+1

$ sortDir似乎是一个坏的变量名称IMO,因为Dir最常用于Directory。我把它称为$ sortDirection,它使代码更具可读性! – markus 2009-09-28 19:48:41

+0

哦,拜托。你什么时候有一个被称为“排序”目录的目录?另外,在上下文中查看变量。如果'$ sortDir'比mysql_query'调用更高一行,我会说这是很多可读/可理解的。 – brianreavis 2009-09-28 19:59:47

+1

我同意tharkun - 对该代码段的快速扫描可能会让您认为您在讨论排序目录。 – Skilldrick 2009-09-28 20:11:51

2

您遇到在代码中的$ _GET,所以我假设你想使用网址参数设置查询的顺序方向。

你的代码看起来有点混乱,你设置$ strASC为“DESC”这是一个矛盾的一点点;)

什么类似的东西:

$sortDirection = $_GET['order']; 

if ($sortDirection == 'ASC' || $sortDirection == 'DESC') 
{ 
    $sql = "SELECT mystuff FROM mytable WHERE mycrit ORDER BY " . $sortDirection; 
} 
else 
{ 
    echo 'Invalid sort direction'; 
} 
相关问题