繁体   English   中英

如何在SQL中串联ORDER BY

[英]How to concatenate ORDER BY in sql

我正在使用GUI网格和SQL。 我有两个GUI按钮,可以根据用户想要信息的顺序进行单击。 订单可以按员工的Last_nameFirst_name ,但不能两者都按。 我不确定如何使用它。 我想使用串联,但不确定如何使用。

以下是我尝试执行的操作:

def sort_employees(self, column):
    try:
        cursor = db.cursor()
        display="SELECT * FROM company ORDER BY  '%" + column + "%' "
        cursor.execute(display)
        entry = cursor.fetchall()
        self.display_rows(entry)

另外,如果我只有进入的话,代码也可以正常工作:

display="SELECT * FROM company ORDER BY Last_name"

不确定为什么查询字符串中包含% ,可能会将其与字符串格式%s语法混淆。

display = "SELECT * FROM company ORDER BY  '%" + column + "%' "

看来您想要的是这样的:

display = "SELECT * FROM company ORDER BY " + column

或者,如我所愿:

display = 'SELECT * FROM company ORDER BY {column}'.format(column=column)

当然,创建此类查询时要小心,您会遇到SQL安全漏洞。

最好使用参数化查询而不是字符串插值/串联,但是我不知道您使用的是哪个数据库接口,但是通过搜索文档很容易找到它。

在SQL中, ORDER BY子句将列名列表作为参数:

--correct 
ORDER BY firstname, lastname, age

它还可以获取函数输出:

--correct, sort names beginning with a Z first
ORDER BY CASE WHEN first name LIKE 'Z%' THEN 1 ELSE 2 END, firstname

在某些数据库中,放置整数序数将按该列排序,从左开始从1开始编号:

--correct, sort by 3rd column then first
ORDER BY 3,1

它不包含碰巧包含列名的字符串列表:

--incorrect - not necessarily a syntax error but will not sort by any named column
ORDER BY 'firstname', 'lastname', 'age'

它也不需要一串csv列名:

--incorrect - again not necessarily a syntax error but won't sort on any of the named columns
ORDER BY 'firstname, lastname, age'

您的代码属于后面的几类:您正在将列名转换为字符串。 错了 “无法正常运行的sql”和“正常运行的sql”非常不同。 将连接结果打印到屏幕上,如果您很难从代码中看到它,请查看它们

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM