Sqlite Android order by & group_concat

Posted

技术标签:

【中文标题】Sqlite Android order by & group_concat【英文标题】: 【发布时间】:2015-06-28 05:25:36 【问题描述】:

我正在使用 sqlite3 : 3.8.2 和 sqliteman (Ububuntu 14.04) 来尝试我在 android 程序中需要的查询。

Android 版本 4.0+。

我有 3 个表用于获取数据

我发现了这个问题:

当我在 sqliteman 中使用这个查询时

SELECT st.nome
AS nome,
st.cognome
AS cognome, 
(SELECT ae.usercode
AS usercode
FROM assenze ae
WHERE st.ultimo_evento = ae.fk_evento)
AS ultimo_evento,
(SELECT 
    GROUP_CONCAT(
        ev.nome_evento, ", "
    )
    AS nome_evento 
    FROM eventi ev 
    WHERE ev.studente_id = st.id 
)
AS nome_evento
FROM studenti st 
WHERE st.classe_ident ='4297'
ORDER BY st.cognome

输出是:

EP, USC, R1, R, A ... 非常适合我

但是当我用db.rawQuery()在android中使用它时,结果是

A, EP, R, R1, USC ... 对我没有好处

似乎也是这个查询的相同结果(在sqliteman和android中执行):

SELECT 
st.nome AS nome, 
st.cognome AS cognome, 
ae.usercode AS ultimo_evento, 
GROUP_CONCAT(
   ev.nome_evento, ", "
) 
AS nome_evento
FROM studenti st
LEFT JOIN eventi ev
ON st.id = ev.studente_id
LEFT JOIN assenze ae
ON st.ultimo_evento = ae.fk_evento
WHERE st.classe_ident ='4297'
GROUP BY st.id
ORDER BY st.cognome

可能是我的错,但我仍在努力寻找解决方案......

谢谢

似乎它也可以在没有 ORDER BY ev.data_ora_evento 的情况下工作。但是在android中仍然无法正常工作...

【问题讨论】:

从上次删除 ORDER BY st.cognome @BSavaliya 不幸的是不起作用... :( Sqlite group_concat ordering的可能重复 【参考方案1】:

group_concat() documentation 说:

连接元素的顺序是任意的。

但是,您可以尝试通过对已排序的子查询执行 group_concat() 来强制排序:

SELECT GROUP_CONCAT(ev.nome_evento, ", ") AS nome_evento 
FROM (SELECT nome_evento
      FROM eventi
      WHERE studente_id = st.id
      ORDER BY whatever) AS ev

【讨论】:

感谢您的链接,但如果它是任意的,为什么在 sqliteman 中可以正常工作,而在 Android 中则不行? “任意”表示任何顺序都是正确的。不同的版本可以使用不同的优化。 所以 sqliteman 给我正确的输出只是为了运气......谢谢唯一的方法是在我从光标获取字符串时根据需要更正顺序......

以上是关于Sqlite Android order by & group_concat的主要内容,如果未能解决你的问题,请参考以下文章

sqlite GROUP BY 和 ORDER

为啥 Sqlite 不使用这个 ORDER BY 的索引?

ORDER BY random() 与 SQLITE 中的种子

sqlite语句order by两个字段同时排序处理

SQLite Random() 在 ORDER BY 中没有正确排序

group_concat sqlite 和 order by