在Qt中使用SQL对表元素进行非常规排序

时间:2014-04-21 16:30:37

标签: c++ sql qt sqlite

我正在创建一个票务系统,我想填充一个表供人们查看所有打开的票证。我希望它们按优先顺序排序,从关键 - >高 - >中 - >低。

我正在重复使用我之前制作的测试数据库程序中的代码,该程序通过"姓氏对表中的条目进行排序。"

while(currentRow < rows){
        qry.prepare("SELECT * FROM users ORDER BY lastname LIMIT :f1, :f2");
        qry.bindValue(":f1", currentRow);
        qry.bindValue(":f2", currentRow+1);
        qry.exec();
        qry.next();
        currentCol = 0;
        //this loop will populate all columns in the current row
        while(currentCol < ui->table->columnCount()){
           QTableWidgetItem *setdes = new QTableWidgetItem;
           setdes->setText(qry.value(currentCol).toString());
           ui->table->setItem(count, currentCol-1, setdes);
           currentCol++;
        }
        currentRow++;

    }

显然,我无法将查询从lastname更改为priority,因为它们会按字母顺序排序,而不是我希望它们排序的顺序。有没有办法我可以执行一个SQL查询来按照我上面提供的顺序对它们进行排序,或者我是否需要填充表格然后自己对它进行排序?

1 个答案:

答案 0 :(得分:2)

您可以使用CASE WHEN ... THEN构造将字符串映射到数值以进行排序,例如

... ORDER BY CASE
    WHEN priority='critical' THEN 1
    WHEN priority='high' THEN 2
    WHEN priority='medium' THEN 3
    WHEN priority='low' THEN 4
    ELSE 5
END