2011-08-24 116 views
1

这是一个比查询更多的问题。我想为我的mysql数据库结果创建动态排序。我目前用查询输出结果。我想创建一个2链接,它将按照所选链接排序结果,再次单击并链接ASC或DSEC结果。排序由XXX按ASC或DESC排序,动态排序,mysql ...

我一直在寻找,但无法找到正确的方式来做到这一点。

我甚至下载了一个框架,看看如何完成,但没有成功。 的例子就像如下:

TITLE TOTAL

像这样简单的声音我无法在网上找到一个动态的例子。

还有其他的发现谷歌提供更多的结果过时和论坛比实际有用的页面? 即使按照去年和相关性排序。希望有人能够给我这方面的一些建议,谢谢

+0

您的表模式/查询在哪里?你的PHP代码在哪里?向我们展示一些代码,这是您的尝试,所以我们可以帮助您解决困难。不要带我们回到我们的代码梦想... – Shef

回答

3
<?php 
    // build the basis for the query 
    $sql = ' 
     SELECT 
      `id`, 
      `title`, 
      `total` 
     FROM 
      `my_table` 
    '; 

    // check for sort field 
    $sort_by = isset($_GET['s']) ? $_GET['s'] : false; 
    // validate the sort field (avoid Bobby Tables!) and provide default 
    switch ($sort_by) { 
     case 'title': 
     case 'id': 
     case 'total': 
      break; 
     default: 
      $sort_by = 'id'; 
    } 

    $sql .= ' ORDER BY '.$sort_by.' '; 

    // get the direction, or use the default 
    $direction = isset($_GET['d']) ? $_GET['d'] : false; 
    if ($direction != 'ASC' && $direction != 'DESC') 
     $direction = 'DESC'; 
    $sql .= $direction; 

    // execute query, get results 
    $res = mysql_query($sql); 
    $results = array(); 
    if ($res) { 
     while ($r = mysql_fetch_assoc($res)) { 
      $results[] = $r; 
     } 
    } 

    // used in table heading to indicate sort direciton 
    $sort_arrow = ($direction == 'ASC' ? '<img src="up_arrow.png" />' : '<img src="down_arrow.png" />'); 

    // used to build urls to reverse the current sort direction 
    $reverse_direction = ($direction == 'DESC' ? 'ASC' : 'DESC'); 
?> 

<table> 
    <thead> 
     <th scope="col" class="<?php echo $sort_by == 'id' ? 'sortColumn' : ''; ?>"> 
      <a href="myscript.php?s=id&d=<?php echo $reverse_direction; ?>">ID</a> 
      <?php echo $sort_by == 'id' ? $sort_arrow : ''; ?> 
     </th> 
     <th scope="col" class="<?php echo $sort_by == 'id' ? 'sortColumn' : ''; ?>"> 
      <a href="myscript.php?s=title&d=<?php echo $reverse_direction; ?>">Title</a> 
      <?php echo $sort_by == 'title' ? $sort_arrow : ''; ?> 
     </th> 
     <th scope="col" class="<?php echo $sort_by == 'id' ? 'sortColumn' : ''; ?>"> 
      <a href="myscript.php?s=total&d=<?php echo $reverse_direction; ?>">Total</a> 
      <?php echo $sort_by == 'total' ? $sort_arrow : ''; ?> 
     </th> 
    </thead> 
    <tbody> 
     <?php 
      if (count($results) > 0) { 
       foreach ($results as $r) { 
        print '<tr>'; 
        print '<th scope="row">'.$r['id'].'</th>'; 
        print '<td>'.$r['title'].'</td>'; 
        print '<td>'.$r['total'].'</td>'; 
        print '</tr>'; 
       } 
      } else { 
       print '<tr><td colspan=3>No results found</td></tr>'; 
      } 
     ?> 
    </tbody> 
</table> 
+0

感谢大家的回复,高于我的预期。所以不需要JavaScript?我以为我会需要JavaScript来动态订购,会提供你们提供的代码,非常感谢快速回复的人。 – Renai

+0

也可以通过AJAX通过javascript来实现,但是你没有提供足够的细节来说明你已经设置了哪些东西来推测这样的例子。简而言之,如果您使用的是AJAX,那么您将对仅生成表格HTML的php脚本进行AJAX调用。在AJAX请求的回调中,您将替换旧的新HTML。考虑到我们的细节,这又是一个超出了这个答案的范围。 –

+0

谢谢,没问题,现在还在玩代码。你能否推荐一个好的AJAX阅读来源?人们经常告诉我W3schools是不好的资源..再次感谢您的时间。 – Renai

4
<?php 

    $order = ($_GET['order'] == 'asc') ? 'asc' : 'desc'; 

    $sql = "SELECT .... FROM ... WHERE ... ORDER BY TITLE $order"; 
    mysql_query($sql) or die(mysql_error()); 
    ... 

    $new_order = ($order == 'asc') ? 'desc' : 'asc'; 
?> 

<table> 
<thead><tr> 
    <th><a href="scriptname.php?order=<?php echo $new_order ?>">TITLE</a></th> 
    <th>Total</th> 
</tr></thead> 
etc.... 
0

这是我如何在C#中做它,你可以使用会话,而不是它的视图状态其余部分将是相同的。

if (Convert.ToString(ViewState["sortField"]) == SortExpression){ 
if (ViewState["sortDir"].ToString() == "ASC") 
     { ViewState["sortDir"] = "DESC"; } 
    else 
     { ViewState["sortDir"] = "ASC"; } 
    } 
else 
{ ViewState["sortDir"] = "ASC"; } 
ViewState["sortField"] = SortExpression; 
0

你可以从URL的$ _GET ['sort']例如。 site.php?sort = ASC并将其传递给查询,记住有关理智检查!