【问题标题】:Output ordered by [closed]输出按 [关闭] 排序
【发布时间】:2013-08-11 17:36:31
【问题描述】:

我有一个表格,可以将数据库中的所有信息放在一个页面上。我想添加一个下拉菜单,显示按名字、姓氏、组等排序...

我该如何做到这一点?

    <?php $query = "SELECT * FROM contacts WHERE type = 'lead'";
$result = mysql_query($query);
if (!$result) {
die('Invalid query: ' . mysql_error()); } ?>

    <table>
    <tr><td>ID</td>     <td>Name</td>       <td>Email</td></tr>
    <?php

    while ($row = mysql_fetch_assoc($result))
    {
        echo '<tr>';
        echo '<td>' . $row['id'] . '</td>';
        echo '<td>' . $row['name'] . '</td>';
        echo '<td>' . $row['email'] . '</td>';
        echo '<td>' . '<a href = "/admin/leads/convert-contact.php?id=' . $row[id] . '">Make Contact</a>';
        echo '</tr>';
    }
    echo '</table>';


?>

【问题讨论】:

  • &lt;select name="orderby"&gt;&lt;option&gt;...&lt;/option&gt;&lt;/select&gt;
  • 到目前为止你有什么尝试?不推荐使用 Mysql_* 函数。检查 mysqli_* 或 PDO。对于您的问题:将带有下拉列表和提交按钮的表单放在那里。在下拉列表中添加一些值 1 2 3 等,然后您将对此进行切换,您将添加到查询(1 - 名字 => 按名字排序)、(2 - 姓氏 - 按姓氏排序)等
  • 请DeiForm,进一步解释一下这个sql查询。如何从选择/选项字段中获取结果并将我的 sql 语句更改为按“X”排序。有人能详细说明一下sql语句应该是什么样子吗?

标签: php mysql


【解决方案1】:

一点点 AJAX 可以使它成为可重新排序的输出。从下面的例子可以看出,这并不难。

以下代码将在页面上放置一个下拉菜单,并允许用户选择排序顺序。选择后,排序后的结果将出现在 div 中。然后用户可以选择不同的排序顺序,这些结果将显示在 div 中。

HTML:

<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {

                $('#mysel').change(function() {
                    var sby = $(this).val();
                    //alert(sby);
                    $.ajax({
                        type: "POST",
                        url: "another_php_file.php",
                        data: 'sortby=' + sby,
                        success: function(thedata) {
                            $("#results").html(thedata) ;
                        }
                    });
                });

            }); //END $(document).ready()

        </script>
    </head>
<body>

    <div id="results"></div>
    <select id="mysel">
        <option value = '0'>Choose One</option>
        <option value = 'last'>Sort by Last Name</option>
        <option value = 'first'>Sort by First Name</option>
    </select>


</body>
</html>

另一个_php_file.php

<?php

    $order = $_POST['sortby'];

    // Do your database login here

    $output = '<table><tr><td>ID</td><td>Name</td><td>Email</td></tr>';

    $result = mysql_query("SELECT * FROM contacts WHERE type = 'lead' ORDER BY '$order'");
    $num_rows = mysql_num_rows($result);

    while ($row = mysql_fetch_assoc($result)) {
        $output .= '<tr>';
        $output .= '<td>' . $row['id'] . '</td>';
        $output .= '<td>' . $row['name'] . '</td>';
        $output .= '<td>' . $row['email'] . '</td>';
        $output .= '<td>' . '<a href = "/admin/leads/convert-contact.php?id=' . $row[id] . '">Make Contact</a>';
        $output .= '</tr>';
    }
    $output .= '</table>';

    echo $output;

如果您是 AJAX 新手,这里有一些非常简单的示例可以帮助您掌握它的窍门。它们非常值得花 15 或 20 分钟来玩。

A simple example

More complicated example

Populate dropdown 2 based on selection in dropdown 1

【讨论】:

    【解决方案2】:

    也许:

    <form action='this page url' type='post'>
        <select name='orderby'>
            <option value='0'>First Name</option>
            <option value='1'>Second Name</option>
            <option value='2'> Name</option>
            <option value='3'> Group</option>
        </select>
        <input type='submit' name='querygroup' value='Order'/>
    </form>
    <table>
    <tr><td>ID</td>     <td>Name</td>       <td>Email</td></tr>
    
    <?php 
        if(isset($_POST['querygroup'])){
            if(is_numeric($_POST['orderby'])){
                $query = "SELECT * FROM contacts WHERE type = 'lead' ORDER BY CASE '".$_POST['orderby']."' WHEN '0' THEN field_name WHEN '1' THEN field_name [other options] ELSE field_name END";
                $result = mysql_query($query);
                if (!$result) {
                    die('Invalid query: ' . mysql_error()); 
                }
    
                while ($row = mysql_fetch_assoc($result)){
                    echo '<tr>';
                    echo '<td>' . $row['id'] . '</td>';
                    echo '<td>' . $row['name'] . '</td>';
                    echo '<td>' . $row['email'] . '</td>';
                    echo '<td>' . '<a href = "/admin/leads/convert-contact.php?id=' . $row[id] . '">Make Contact</a>';
                    echo '</tr>';
                }
            }
        }
    ?>
    </table>
    

    【讨论】:

      【解决方案3】:
       <form action='database.php' type='post'>
       <select name='orderby'>
       <option value='firstname'>First Name</option>
       <option value='secondname'>Second Name</option>
       <option value='group'> group</option>
       </select>
       </form>
      

      在 PHP 文件中

      if($_POST['orderby']=='firstname') $lastpart= 'ORDER BY firstname';
      if($_POST['orderby']=='lastname') $lastpart= 'ORDER BY lastname';
      if($_POST['orderby']=='group') $lastpart= 'GROUP BY field';
      
      <?php $query = "SELECT * FROM contacts WHERE type = 'lead' $lastpart"; ----
      

      【讨论】:

        【解决方案4】:
        SELECT *
          FROM Whatever
               ORDER BY CASE 
                          WHEN @order =  'first' THEN first_name
                          WHEN @order = 'last' THEN last_name
                          WHEN @order = 'group' THEN group_name
                          ELSE CAST(id AS Varchar)
                        END
        

        请注意,所有排序列必须是类型兼容的(例如,所有字符/varchars,或所有数字)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多