Pergunta

Eu tenho uma matriz PHP com números de IDs. Esses números já estão ordenados.

Agora eu gostaria de obter meu resultado através do método in (), para obter todos os IDs.

No entanto, esses IDs devem ser ordenados como no método in.

Por exemplo:

IN(4,7,3,8,9)  

Deve dar um resultado como:

4 - Article 4  
7 - Article 7  
3 - Article 3  
8 - Article 8  
9 - Article 9

Alguma sugestão? Talvez haja uma função para fazer isso?

Obrigado!

Foi útil?

Solução

Eu acho que você pode estar procurando função CAMPO - Embora normalmente pensado como uma função de string, também funciona bem para números!

ORDER BY FIELD(field_name, 3,2,5,7,8,1)

Outras dicas

Você poderia usar FIELD():

ORDER BY FIELD(id, 3,2,5,7,8,1)

Retorna o índice (posição) de STR na lista STR1, STR2, STR3, ... Retorna 0 se STR não for encontrado.

Porém, é uma espécie de hack feia, então realmente usa apenas se você não tiver outra escolha. Classificar a saída em seu aplicativo pode ser melhor.

O SQL padrão não fornece uma maneira de fazer isso (o MySQL pode, mas eu prefiro soluções que sejam neutra em termos de fornecedores para que eu possa alternar o DBMS 'a qualquer momento).

Isso é algo que você deve fazer no pós-processamento depois O conjunto de resultados é retornado. O SQL só pode devolvê -los em uma ordem especificada na cláusula "Ordem por" (ou em algum peça se não houver tal cláusula).

A outra possibilidade (embora eu não goste, estou com honra para dar a você a escolha) é fazer várias viagens ao banco de dados, uma para cada ID e processá-las à medida que entram:

select * from tbl where article_id = 4;
// Process those.
select * from tbl where article_id = 7;
// Process those.
: : : : :
select * from tbl where article_id = 9;
// Process those.

Você só precisará dar o pedido correto por instrução.

SELECT ID FROM myTable WHERE ID IN(1,2,3,4) ORDER BY ID

Por que você gostaria de receber seus dados não ordenados como no seu exemplo?

Se você não se importa de concordar com consultas longas, tente assim:

SELECT ID FROM myTable WHERE ID=1
UNION
SELECT ID FROM myTable WHERE ID=3
UNION
SELECT ID FROM myTable WHERE ID=2
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top