如何在Node.js中结合EJS从MySQL获取数据并按最新用户排序?
解决EJS渲染用户表格时最新用户置顶的问题
Hey there! 要让最新创建的用户排在表格最顶部,有两种实用的方案,优先推荐从数据库层面解决,效率更高:
方案1:MySQL查询时直接排序(最优)
这是最靠谱的方式,因为让数据库来处理排序比前端处理更高效,尤其是数据量较大的时候。
假设你的用户表有一个记录创建时间的字段(比如created_at,类型是DATETIME或TIMESTAMP),只需要修改你的查询SQL语句,加上降序排序:
SELECT * FROM users ORDER BY created_at DESC;
这里的DESC表示降序排列,会让最新创建的用户(created_at值最大的)排在结果集的最前面。
把这个排序后的结果传给EJS模板,你原来的循环代码完全不用改,直接就能渲染出最新用户置顶的表格啦:
<% for(var i=0; i<users.length; i++ ){ %> <tr> <td> <%= users[i].username %> </td> <td> <%= users[i].first_name %> </td> <td> <%= users[i].last_name %> </td> <td> <%= users[i].email %> </td> <td> <%= users[i].type %> </td> </tr> <% } %>
方案2:在EJS模板中反转数组(应急方案)
如果暂时没法修改后端的SQL查询,可以在EJS里直接反转用户数组,让最新的用户跑到前面。
注意:
直接用users.reverse()会修改原数组,如果后续模板还要用到原顺序的用户数据,建议先复制一份再反转:
<% const reversedUsers = [...users].reverse(); %> <% for(var i=0; i<reversedUsers.length; i++ ){ %> <tr> <td> <%= reversedUsers[i].username %> </td> <td> <%= reversedUsers[i].first_name %> </td> <td> <%= reversedUsers[i].last_name %> </td> <td> <%= reversedUsers[i].email %> </td> <td> <%= reversedUsers[i].type %> </td> </tr> <% } %>
如果不需要保留原数组,也可以直接反转后循环:
<% users.reverse(); %> <% for(var i=0; i<users.length; i++ ){ %> <!-- 原循环代码不变 --> <% } %>
小提醒
不管用哪种方案,都要确保你的用户表中有能准确标识创建顺序的字段(比如自增ID或者创建时间),如果是用自增ID排序,SQL可以写成ORDER BY id DESC,效果是一样的~
内容的提问来源于stack exchange,提问作者Max Kasem
相关产品推荐
相关产品推荐

