2017-07-28 1 views
1

tout le monde.Y at-il un moyen d'obtenir cet ordre de résultat dans MySQL?

J'aide un ami sur son site mais je suis bloqué à ce stade. Sa base de données a été créée par lui-même, qui n'a aucune connaissance de la modélisation de base de données, donc j'ai du mal à obtenir les résultats que je veux.

J'ai la wich requête suivante a tout ce que je besoin:

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; 

qui produit le résultat suivant

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 

Mais depuis l'ID de la première Mercenaire est inférieure à l'ID du premier Hawkeye, ces lignes devraient apparaître avant Hawkeye, comme ceci:

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 

Y a-t-il un moyen de faire ça? Ou dois-je faire cela dans le code après avoir obtenu les résultats? En outre, il y a beaucoup plus de champs que ceux 3, si vous avez besoin de la liste complète, faites le moi savoir.

Répondre

0

Begin vous interrogez avec:

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 [...] 

Le sous-requête trouvera le moins indice pour chaque nome.

Ensuite, vous pouvez utiliser min_indice dans la clause ORDER BY

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

Wow, cela a fonctionné parfaitement. J'ai essayé avec le groupe par avant, mais je ne pouvais pas le faire fonctionner, mais en utilisant la jointure interne, c'était parfait. Merci beaucoup! –

0

Essayez cette

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

Salut, merci pour la réponse, mais il ne fonctionne pas. Ce que je dois est à l'ordre par ID alors obtenir tous les registres qui a le même nom que la première et de mettre ceux immédiatement après, comme: 2 - B 4 - B 6 - B 1 - A 3 - a 5 - un se transformerait en: 1 - a 3 - a 5 - a 2 - B 4 - B 6 - B Depuis le plus bas id est d'un registre "a". –

1

Vous avez juste besoin d'ajouter tabelaseriesbs.id ASC comme ordre par condition. Cela peut perturber votre autre ordre en fonction des conditions mais en fonction de l'endroit où vous l'avez placé, mais en fonction de la façon dont j'interprète votre requête, mettre cela comme votre condition finale devrait garder vos autres ordres relatifs et aussi commander vos identifiants.

+0

Désolé, j'ai oublié de mentionner, l'identifiant est déjà dans l'ordre, mais la requête est en portugais. C'est la dernière condition "cast (tabelaseriesbs.indice AS SIGNED) ASC" –

+0

@LucasHoffmann Pourquoi est-il écrit id dans le jeu de résultats, si c'est indice dans la requête? Vous devriez nous présenter de vraies informations, si vous voulez de vraies réponses :) –

+0

@ Félix Gagnon-Grenier Nous venons tout juste de modifier la publication pour que les tableaux reflètent les noms utilisés dans la requête. Merci pour votre réponse. –