有什么办法可以得到MySQL中的这个结果顺序吗?

Is there any way to get this result order in MySQL?

大家。

我在他的网站上帮助一个朋友,但我实际上被困在了这一点上。

他的数据库是他自己创建的,他对数据库建模一无所知,所以我很难从中得到我想要的结果。

我有以下查询,其中包含我需要的一切:

SELECT * FROM tabelaseriesbs 
    LEFT JOIN tabelatextosbs ON tabelatextosbs.nome = tabelaseriesbs.nome and tabelaseriesbs.alter_ego = tabelatextosbs.alter_ego and tabelatextosbs.versao = tabelaseriesbs.versao
    LEFT JOIN tabelaformatosbs ON tabelaformatosbs.colecao = tabelaseriesbs.colecao,
        (SELECT distinct tabelaseriesbs.nome, tabelaseriesbs.alter_ego, tabelaseriesbs.versao FROM tabelaseriesbs
        LEFT JOIN tabelaformatosbs ON tabelaformatosbs.colecao = tabelaseriesbs.colecao,
            (SELECT tabelaseriesbs.nome, tabelaseriesbs.alter_ego, tabelaseriesbs.versao FROM tabelaseriesbs 
                WHERE 1=1 AND (tabelaseriesbs.colecao = 'Universo Marvel') AND (tabelaseriesbs.raridade = 'Comum')
            ) col 
        WHERE 1=1 AND (col.nome = tabelaseriesbs.nome) AND (col.alter_ego = tabelaseriesbs.alter_ego) 
                  AND (col.versao = tabelaseriesbs.versao) AND (tabelaformatosbs.formato >= 2) 
         ) form 
    WHERE 1=1 AND (tabelaseriesbs.alter_ego = form.alter_ego) 
              AND (tabelaseriesbs.nome = form.nome) 
              AND (tabelaseriesbs.versao = form.versao) 
              AND (tabelatextosbs.sitiada_afiliacoes = '0') 
    ORDER BY tabelatextosbs.nome ASC, tabelatextosbs.alter_ego ASC, tabelatextosbs.versao ASC, cast(tabelaseriesbs.indice AS SIGNED) ASC;

产生以下结果

indice  nome       series
2       Hawkeye    Universo Marvel
4       Hawkeye    Poderes Ocultos
6       Hawkeye    Iniciativa Vingadores
8       Hawkeye    Battle Box
10      Hawkeye    Guerra Civil
1       Mercenary  Universo Marvel
3       Mercenary  Ascensão e Queda
5       Mercenary  Ascensão e Queda - Deck

但是由于第一个雇佣兵的id低于第一个鹰眼的id,所以这些行应该出现在鹰眼之前,像这样:

indice  nome       series
1       Mercenary  Universo Marvel
3       Mercenary  Ascensão e Queda
5       Mercenary  Ascensão e Queda - Deck
2       Hawkeye    Universo Marvel
4       Hawkeye    Poderes Ocultos
6       Hawkeye    Iniciativa Vingadores
8       Hawkeye    Battle Box
10      Hawkeye    Guerra Civil

有办法吗?或者我是否必须在获得结果后在代码中执行此操作?此外,还有比这 3 个更多的字段,如果您需要完整列表,请告诉我。

试试这个

ORDER BY table.char DESC, table.id ASC

您只需添加 tabelaseriesbs.id ASC 作为条件排序。这可能会根据条件破坏您的其他订单,但取决于您放置它的位置,但根据我对您的查询的解释,将此作为您的最终条件应该保留您的其他相关订单并订购您的 ID。

开始查询:

SELECT * 
FROM tabelaseriesbs
INNER JOIN (
    SELECT nome, MIN(cast(indice AS SIGNED)) as min_indice
    FROM tabelaseriesbs
    GROUP BY nome
) order_table USING (nome)
LEFT JOIN [...]

子查询将为每个 nome.

找到最少的 indice

那么可以在ORDER BY子句中使用min_indice

ORDER BY order_table.min_indice, [...]