É possível classificar no mysql por "ordenar por" usando um conjunto predefinido de valores de coluna (ID) como: ordenar por (ID = 1,5,4,3) então eu obteria o registro 1, 5, 4, 3 naquele encomendar fora?
ATUALIZAÇÃO: Sobre abusar do mysql ;-) Tenho que explicar porque preciso disso ...
Quero que meus registros sejam classificados aleatoriamente a cada 5 minutos. Eu tenho uma tarefa cron para fazer a tabela de atualização para colocar uma ordem de classificação diferente e aleatória nela. Só existe um problema! PAGINAÇÃO. Terei um visitante que chega à minha página e darei a ele os primeiros 20 resultados. Ele esperará 6 minutos e irá para a página 2 e terá resultados errados porque a ordem de classificação já foi alterada.
Então pensei que se ele vier ao meu site eu coloco todos os ID's em uma sessão e quando ele está na página 2 ele pega os registros corretos mesmo que a classificação já tenha mudado.
Existe alguma outra maneira melhor de fazer isso?
Respostas:
Você pode usar a função ORDER BY e FIELD. Consulte http://lists.mysql.com/mysql/209784
Ele usa a função Field () , que "Retorna o índice (posição) de str na lista str1, str2, str3, .... Retorna 0 se str não for encontrado" de acordo com a documentação. Então, na verdade, você classifica o conjunto de resultados pelo valor de retorno desta função, que é o índice do valor do campo no conjunto fornecido.
fonte
Você deve ser capaz de usar
CASE
para isso:fonte
Na documentação oficial do mysql sobre ORDER BY , alguém postou que você pode usar
FIELD
para este assunto, como este:Este é um código não testado que em teoria deveria funcionar.
fonte
Se eu tivesse 10 registros por exemplo, desta forma os ID 1, 5, 4 e 3 aparecerão primeiro, os demais registros aparecerão em seguida.
Exibição normal 1 2 3 4 5 6 7 8 9 10
Com este caminho
8 5 4 3 1 2 6 7 9 10
fonte
Existe outra maneira de resolver isso. Adicione uma tabela separada, mais ou menos assim:
Esta tabela agora será usada para definir seu próprio mecanismo de pedido.
Adicione seus valores lá:
... e, em seguida, modifique sua instrução SQL ao ingressar nesta nova tabela.
Esta solução é um pouco mais complexa do que outras soluções, mas usando-a, você não precisa alterar sua
SELECT
instrução sempre que seus critérios de pedido mudarem - apenas altere os dados na tabela de pedidos.fonte
fonte
ASC OR DESC
seja a sintaxe adequadaSe você precisar solicitar um único id primeiro no resultado, use o id.
Se você precisar começar com uma sequência de vários ids, especifique uma coleção, semelhante ao que você usaria com uma
IN
instrução.fonte
Se você quiser ordenar um único id por último no resultado, use a ordem por maiúsculas e minúsculas. (Ex .: você deseja "outra" opção na última e todas as listas de cidades aparecem em ordem alfabética.)
Se eu tivesse 5 cidades, por exemplo, eu quero mostrar a cidade em ordem alfabética com a opção "outra" exibida por último na lista suspensa, então podemos usar esta consulta. veja o exemplo que outros estão mostrando na minha tabela no segundo id (id: 2), então estou usando "quando id = 2" na consulta acima.
registro na tabela DB:
minha saída:
fonte