[英]How to concatenate ORDER BY in sql
我正在使用GUI網格和SQL。 我有兩個GUI按鈕,可以根據用戶想要信息的順序進行單擊。 訂單可以按員工的Last_name
或First_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.