有什么办法可以得到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, [...]
大家。
我在他的网站上帮助一个朋友,但我实际上被困在了这一点上。
他的数据库是他自己创建的,他对数据库建模一无所知,所以我很难从中得到我想要的结果。
我有以下查询,其中包含我需要的一切:
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, [...]