Mysql ORDER BY length(col), col 不工作

Posted

技术标签:

【中文标题】Mysql ORDER BY length(col), col 不工作【英文标题】:Mysql ORDER BY length(col), col is not working 【发布时间】:2014-07-21 00:25:50 【问题描述】:
     mysql employee table 

注意:这里 emp_id 是 varchar

  String query="select * from employee ORDER BY length(emp_id),emp_id";

  if i run only the above query it works fine......
  Query ouput :

当我运行下面的 jsp 代码时,这个查询不起作用

<html><head>
        <script type="text/javascript" src="jquery-1.7.2.min.js"></script>
    <link href="jquery.dataTables.css" rel="stylesheet" type="text/css"/>
    <script src="jquery.dataTables.js"></script>
</head>
<body>
    <div class="container">
        <table id="example" class="display"  border="1">
            <thead><tr>
                                        <th>EMPLOYEE_ ID</th>
                    <th>NAME</th>
                                        <th>DEPARTMENT</th>
                                        <th>DESIGNATION</th>              
               </tr></thead>            
<tbody>
        <%    
          try
              
              String query="select * from employee ORDER BY length(emp_id),emp_id";
              Class.forName("com.mysql.jdbc.Driver");
              Connection con = (Connection)   DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","");
              Statement stmt=con.createStatement();
              ResultSet rs=stmt.executeQuery(query);
              while(rs.next())
                                                                 
                               %>
                               <tr> 
                                   <td><%=rs.getString(1)%></td>
                                   <td><%=rs.getString(2)%></td>
                                   <td><%=rs.getString(3)%></td>
                                   <td><%=rs.getString(4)%></td>
                               </tr>
                               <%  %>
    </tbody></table>
                            <%
                              rs.close(); stmt.close();con.close();
             
              catch(Exception e)
                                 e.printStackTrace(); 
                            %>          
            </div>
<script>
     $(document).ready( function () 
 var table = $('#example').DataTable();
      );
    </script></body></html>

jsp 的输出:

注意:在我的表中 emp_id 是 varchar................................................. ..................................................... …………………………………………………………………………………………………………………………………… 请帮帮我....

【问题讨论】:

您认为您在 JSP 代码或 SQL 查询中有错误吗? mysql查询或我的jsp页面没有错误...... emp_id 为什么你有 varchar? 因为我的 emp_id 列也包含字母数字值 你的 Datatable() 的一些默认选项是否可以改变你的出现顺序? 【参考方案1】:

使用JSP Standard Tag Library 和JSP Expression Language,而不是使用更易于管理且不易出错Scriplet。使用SQL Tag Library,它提供了用于访问JSP 中的数据库的JSTL SQL 标签。


如果查询在数据库中给出了正确的结果,那么 UI 部分就有问题。使用JSTL SQL sql:query Tag 重试以下示例教程。

示例代码:

<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

<html>
<head>
<title>JSTL sql:query Tag</title>
</head>
    <body>
        <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/TEST" user="root" password="pass123" />

        <sql:query dataSource="$snapshot" var="result">
            SELECT * from Employees;
        </sql:query>

        <table border="1" >
            <tr>
                <th>Emp ID</th>
                <th>First Name</th>
                <th>Last Name</th>
                <th>Age</th>
            </tr>
            <c:forEach var="row" items="$result.rows">
                <tr>
                    <td><c:out value="$row.id" /></td>
                    <td><c:out value="$row.first" /></td>
                    <td><c:out value="$row.last" /></td>
                    <td><c:out value="$row.age" /></td>
                </tr>
            </c:forEach>
        </table>
    </body>
</html>

现在尝试访问上面的JSP,应该会显示如下结果:

【讨论】:

Braj 我试过你的代码......但我仍然得到相同的......排序顺序 您是否尝试过使用基本table 结构而不是使用jQuery 的示例代码?这是与jQuery相关的问题 如何添加jquery文件...?和使用 标签 一样吗 阅读jQuery adding to JSP page【参考方案2】:

可能是您的 jquery 采用默认排序样式...

【讨论】:

以上是关于Mysql ORDER BY length(col), col 不工作的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的SQL语句优化-group by语句的优化

Mysql查询(order by)很慢

转转转---ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法

oracle的row_number() OVER (ORDER BY COL2 asc)和row_number() OVER (PARTITION BY COL1 ORDER BY COL2)的用法

如何与“row_number() over (partition by [Col] order by [Col])”相反

分析函数系列之sum(col1) over(partition by col2 order by col3):实现分组汇总或递增汇总