2017-07-28 67 views
1

每個人。有什麼辦法可以在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下層這些線路應該出現在Hawkeye之前,如下所示:

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,如果你需要完整的列表,請讓我知道。

回答

0

你開始與查詢:

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使用min_indice BY子句

ORDER BY order_table.min_indice, [...] 
+0

哇,它工作完美。我已經嘗試過之前的團隊,但無法使用它,但使用內部連接是完美的。非常感謝你! –

0

試試這個

ORDER BY table.char DESC, table.id ASC 
+0

您好,感謝您的答覆,但它不工作。我需要的是通過ID訂購然後讓具有相同的名稱作爲第一個所有其他寄存器,把後,立即那些,如: 2 - B 4 - B 6 - B 1 - 一個 3 - 甲 5 - 甲 會變成: 1 - 甲 3 - 甲 5 - 甲 2 - B 4 - B 6 - B 由於最低ID是寄存器 「A」 的。 –

1

你只需要添加tabelaseriesbs.id ASC由條件的順序。根據條件的不同,這可能會通過條件來破壞其他訂單,但根據我的解釋,將其作爲最終條件應該保留其他相關訂單並訂購您的ID。

+0

對不起,我忘了提及,id已經在排序中,但查詢是葡萄牙語。這是最後一個條件「cast(tabelaseriesbs.indice AS SIGNED)ASC」 –

+0

@LucasHoffmann它爲什麼在結果集中寫入id,如果它在查詢中是指數?如果您想要真正的答案,您應該向我們介紹真實的信息:) –

+0

@FélixGagnon-Grenier剛剛編輯帖子,以便表格反映查詢中使用的實際名稱。謝謝您的回覆。 –

相關問題