从MySQL中的每个分组数据中获取单个记录

时间:2015-12-02 15:03:10

标签: mysql select

我有一个存储语言信息的表格,我想从中提取最相关的数据。如果您请求的语言可用,则应该使用该语言。如果没有,那么它应该返回默认值。

数据如下所示:

ID  PARENT_ID   NAME    LANG
1   1           test    default
2   1           test    en-GB
3   1           test    fr
4   4           Hello   default
5   4           Hello   en-GB
6   4           Hola    es

如果我想获得西班牙语的所有结果,那么我应该能够获得记录6和记录1,因为第一组不包含西班牙语版本。我该怎么做呢?

这是我可以通过查询得到的最接近的,但我总是获得默认值而不是西班牙语结果:

SELECT h_id,
    h_faq_id,
    h_question,
    h_language
FROM
    h_itsm_faqs
WHERE
    h_language = 'default'
OR
    h_language LIKE 'es'
GROUP BY
    h_faq_id
ORDER BY
    (CASE WHEN h_language LIKE 'es' THEN 1 ELSE 2 END) ASC

我看到的选项如下:

  1. 获得两者的一个查询(不知道如何做到这一点)
  2. 两个查询以获取语言和默认值,然后找出我需要的内容
  3. 获取所有结果并对其进行排序
  4. 选项1会很棒,但值得注意的是选项3在分页时可能会有问题。

1 个答案:

答案 0 :(得分:2)

一种可能的方法是使用左连接将表连接到自身。然后,您可以使用默认语言和特定语言。

for (int i = 0; i < activos; i++) {
            atributos[i] = listadetextfields.get(arreglodeactivos[i]).getText();
            columnas[i] = listadelabels.get(arreglodeactivos[i]).getText();
            ModificarRegistro.where = ModificarRegistro.where + columnas[i] + "=" + "'" + atributos[i] + "' AND ";
        }