使用SQLite按字段排序

时间:2010-06-22 09:22:16

标签: mysql sqlite lucene

我实际上正在开发一个Symfony项目,我们正在使用Lucene作为我们的搜索引擎。 我试图使用SQLite内存数据库进行单元测试(我们使用的是MySQL),但我偶然发现了一些东西。

该项目的搜索引擎部分使用Lucene索引。基本上,您查询它并获得一个有序的id列表,您可以使用它来查询Where In()子句中的数据库。 问题是查询中有一个ORDER BY Field(id,...)子句,它以与Lucene返回的结果相同的顺序排序结果。

使用SQLite对ORDER BY Field有什么替代方法吗?或者是否有其他方式以与Lucene相同的方式订购结果?

谢谢:)

编辑:

简化查询可能如下所示:

SELECT i.* FROM item i
WHERE i.id IN(1, 2, 3, 4, 5)
ORDER BY FIELD(i.id, 5, 1, 3, 2, 4)

1 个答案:

答案 0 :(得分:2)

这是非常讨厌和笨重的,但它应该工作。创建一个临时表,并插入由Lucene返回的有序ID列表。将包含项目的表加入包含有序ID列表的表中:

CREATE TABLE item (
    id INTEGER PRIMARY KEY ASC,
    thing TEXT);

INSERT INTO item (thing) VALUES ("thing 1");
INSERT INTO item (thing) VALUES ("thing 2");
INSERT INTO item (thing) VALUES ("thing 3");

CREATE TEMP TABLE ordered (
    id INTEGER PRIMARY KEY ASC,
    item_id INTEGER);

INSERT INTO ordered (item_id) VALUES (2);
INSERT INTO ordered (item_id) VALUES (3);
INSERT INTO ordered (item_id) VALUES (1);

SELECT item.thing
FROM item
JOIN ordered
ON ordered.item_id = item.id
ORDER BY ordered.id;

输出:

thing 2
thing 3
thing 1

是的,这种SQL会让人不寒而栗,但我不知道ORDER BY FIELD的SQLite等价物。