簡體   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