【问题标题】:Sorting Dynamically With Links in MySQL在 MySQL 中使用链接动态排序
【发布时间】:2012-09-04 01:47:46
【问题描述】:

我有一个 MySQL 查询,我试图在单击链接时动态排序。

我的链接是这样的

                 <form action="topics.php" method="get" class="form">
                   <label class="label">Order Table By</label>
                    <li><a href="topics.php?sort=ID">ID</a></li>
                    <li><a href="topics.php?sort=Title">Title</a></li>
                    <li><a href="topics.php?sort=TAGS">Tags</a></li>
                    <li><a href="topics.php?sort=VIEWS">Views</a></li>
                 </form>

MySQL 查询如下所示:

<?php

        $order = mysql_real_escape_string($_GET['sort']);          
$topics = mysql_query("SELECT topic_id AS 'ID', topic_head AS 'Title', 
                              topic_tags AS 'TAGS', topic_views AS 'VIEWS',
                       FROM forum_topics 
                       WHERE topic_id > 0 ORDER BY '$order' DESC") or die (mysql_error());

当我点击上面的任何链接时,什么都没有发生。没有显示错误,没有进行排序。 问题可能出在哪里? 谢谢

【问题讨论】:

    标签: php mysql html sorting


    【解决方案1】:

    试试这个:

    <?php
      $sortParams = ('ID','Title','Tags','Views');
      $order = mysql_real_escape_string($_GET['sort']);
      if(!in_arrray($order,$sortParams))
      {
        $order = 'ID';//Assuming by default you sorting by ID
      }  
      $topics = mysql_query("SELECT topic_id AS 'ID', topic_head AS 'Title', 
            topic_tags AS 'TAGS', topic_views AS 'VIEWS',
            FROM forum_topics 
            WHERE topic_id > 0 ORDER BY $order DESC") or die (mysql_error());
    

    【讨论】:

      【解决方案2】:

      您是按$_SESSION['order'] 而非$order... 排序的,我建议您在创建MySQL 查询之前将$_SESSION['order'] 替换为$order 或使用$_SESSION['order'] = $order

      【讨论】:

      • 感谢您的回答。我已删除 $_SESSION['order'],但仍然无法正常工作
      【解决方案3】:
      error_reporting(E_ALL);
      

      将其添加到您的代码中。 http://php.net/manual/en/function.error-reporting.php

      如果您仔细查看您的代码,您会发现您使用的是$_SESSION[order] 而不是$_SESSION['order'] 注意引号

      真正的问题是:

      在第 1 行您定义了$order,而不是$_SESSION['order']

      我的建议是:获得合适的 IDE,像 PhpStormNetbeans 这样的合适 IDE 会突出显示您犯的许多错误,例如拼写错误和未使用的变量。当您无法记住变量时,它会变得很方便;)

      【讨论】:

        【解决方案4】:

        $_SESSION[order] 是除$order 之外的另一个变量。它们是不同的,因此除非您将 $_SESSION[order] 替换为变量 $order 或它们共享相同的值,否则您所做的不会订购任何东西。

        【讨论】:

        • 我删除了 $_SESSION['order'] 并替换为 $order,但仍然无法正常工作。
        • @DotOyes,请将其添加为 更新,而不是在原始帖子中进行编辑。对于这篇文章的新访问者来说,很多答案看起来毫无用处,但它们确实帮助了你。所以请:在您的原始帖子中添加而不是编辑;)
        • 假设你的查询是:$topics = mysql_query("SELECT topic_id AS 'ID', topic_head AS 'Title', topic_tags AS 'TAGS', topic_views AS 'VIEWS', FROM forum_topics WHERE topic_id &gt; 0 ORDER BY '".$order."' DESC") or die (mysql_error());
        • 如果还是不行,检查你的返回值。例如,topic_id 将作为整数返回,而其他将作为字符串值返回。然后在 $order 变量中使用正确的引号。
        【解决方案5】:

        问题是你在$order 周围有引号,所以它是按文字字符串排序的,而不是一列。将它们更改为反引号。

         WHERE topic_id > 0 ORDER BY `$order` DESC"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-28
          • 1970-01-01
          • 2023-03-08
          • 2017-01-15
          相关资源
          最近更新 更多