2009-12-09 67 views
0

我有以下代码:mysql_fetch_assoc返回结果在错误的顺序

$sortorder = $_GET['sort']; 
switch($sortorder) 
{ 
case "modulea": 
    $result2 = db_query("SELECT * FROM {vanqueue_registrations} WHERE isactive=1 ORDER BY `cleanmodule` ASC"); 
case "moduled": 
    $result2 = db_query("SELECT * FROM {vanqueue_registrations} WHERE isactive=1 ORDER BY `cleanmodule` DESC"); 
case "typea": 
    $result2 = db_query("SELECT * FROM {vanqueue_registrations} WHERE isactive=1 ORDER BY `cleantype` ASC"); 
    var_dump($result2); 
case "typed": 
    $result2 = db_query("SELECT * FROM {vanqueue_registrations} WHERE isactive=1 ORDER BY `cleantype` DESC"); 
default: 
    $result2 = db_query("SELECT * FROM {vanqueue_registrations} WHERE isactive=1"); 
} 
while($result = mysql_fetch_assoc($result2)) 
{ 
var_dump($result); 
$value .= "<tr><td><center>" . $result['cleanmodule'] . "</center></td><td><center>" . $result['cleantype'] . "</center></td><td><center>" . $directions[$result['direction']] . "</center></td></tr>"; 
} 

正如你所看到的,它需要一个GET变量,并根据其价值,执行某个查询。 (不用担心,这只是测试代码,我会明显在稍后验证输入。)

我的问题:正确的查询正在执行,但mysql_fetch_assoc似乎是以某种方式重新排序行,不想要。

我正在测试案例typea,当我执行页面时,执行var_dump的调用 - 我可以在页面上看到结果。所以交换机肯定工作。

但是,while语句中的var_dump正在输出由表中的主键排序的行,而不是按照我的请求cleantype输出。

我该如何让mysql_fetch_assoc以我想要的方式输出行?

TIA。

+0

请格式化您的代码 – 2009-12-09 22:10:16

+1

完成,对不起 - 第一次看起来不错 – benjy 2009-12-09 22:10:55

回答

6

你忘了使用break在所有的情况下,最终...

因此,您default查询始终得到了最后执行。

+0

哎呦。谢谢。那很简单。 – benjy 2009-12-09 22:12:07

+0

switch {case'1':break; } – 2009-12-09 22:12:37

+0

@cballou:嗯?你什么意思? – Franz 2009-12-09 22:14:49