mysql之使用 SQLite 按字段排序

jpfss 阅读:565 2023-08-24 23:31:47 评论:0

我实际上正在处理一个 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) 

请您参考如下方法:

这是非常讨厌和笨拙的,但它应该工作。创建一个临时表,并插入由 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 等价物。


标签:mysql
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

全民解析

全民解析

关注我们