Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

luan_alves

ordernar select a partir de um dado da tabela

Recommended Posts

Boa tarde, a todos!

 

Gostaria de saber se existe alguma função no mysql que ordena o select por um caracterer do banco, exemplo:

 

select * from clientes where tabela = dados.

 

O resultado seria todos os clientes porém a ordem iria começar a partir do dados informado para a consulta da tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe o ORDER BY é isto ?!

 

não

 

o que, porque eu irei passar um valor, e este valor seria a ordenação da busca.

Se o order by fizesse isso 'order by coluna="dados" ', ai resolveria.

 

só para ser mais claro.

eu tenho que fazer uma consulta com um valor que é determinado pelo cliente, e o resultado deverá trazer todas as linhas do banco como se fosse um select padrão, porém a ordem deve começar com o dado informado pelo o cliente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde amigo,

 

Por exemplo se o cliente passar um valor que esteja no meio da tabela, você precisa que o SELECT comece no meio, vá até o final, depois volte no começo e vá até onde começou? oO

 

Tipo uma tabela com os valores 1, 2, 3, 4, 5, 6. Se o cliente te passar o valor 5 teu select terá que retornar isso aqui:

 

5

6

1

2

3

4

 

 

?

 

Meio complicadinho eu acho, se for este o caso eu não sei como fazer num select só, porém poderia fazer em 2 com UNION, assim:

 

SELECT colunas FROM tabela WHERE coluna_de_filtro >= valor_passado_pelo_cliente ORDER BY coluna de filtro ASC

UNION

SELECT colunas FROM tabela WHERE coluna_de_filtro <  valor_passado_pelo_cliente ORDER BY coluna de filtro ASC

 

Dessa forma o primeiro SELECT traria tudo que tem igual ou depois do valor que o cliente passou, e o segundo SELECT traria tudo que tem antes disso.

 

Espero que resolva, abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde amigo,

 

Por exemplo se o cliente passar um valor que esteja no meio da tabela, você precisa que o SELECT comece no meio, vá até o final, depois volte no começo e vá até onde começou? oO

 

Tipo uma tabela com os valores 1, 2, 3, 4, 5, 6. Se o cliente te passar o valor 5 teu select terá que retornar isso aqui:

 

5

6

1

2

3

4

 

 

?

 

Meio complicadinho eu acho, se for este o caso eu não sei como fazer num select só, porém poderia fazer em 2 com UNION, assim:

 

SELECT colunas FROM tabela WHERE coluna_de_filtro >= valor_passado_pelo_cliente ORDER BY coluna de filtro ASC

UNION

SELECT colunas FROM tabela WHERE coluna_de_filtro <  valor_passado_pelo_cliente ORDER BY coluna de filtro ASC

 

Dessa forma o primeiro SELECT traria tudo que tem igual ou depois do valor que o cliente passou, e o segundo SELECT traria tudo que tem antes disso.

 

Espero que resolva, abraço.

 

Muito obrigado pela a resposta!

Eu já tinha chegado nesta resposta, mas estava pensei que teria uma forma nativa do sql para resolver isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tranquilo, fico satisfeito em ajudar.

 

Que eu conheça não tem mesmo, se algum dia você descobrir uma volta nesse tópico e compartilha com a gente porque deve ser uma funcionalidade legal :P

 

Abraço e boa sorte com o cliente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tranquilo, fico satisfeito em ajudar.

 

Que eu conheça não tem mesmo, se algum dia você descobrir uma volta nesse tópico e compartilha com a gente porque deve ser uma funcionalidade legal :P

 

Abraço e boa sorte com o cliente.

 

Com certeza,

A idéia é ploriferar o conhecimento.

 

Muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra solução possível :

 

SELECT colunas 
FROM   tabela 
WHERE  coluna_de_filtro >= valor_passado_pelo_cliente 
ORDER BY (case when coluna_de_filtro >= valor_passado_pelo_cliente then 0 else 1 end),
        coluna de filtro  

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra solução possível :

 

SELECT colunas 
FROM   tabela 
WHERE  coluna_de_filtro >= valor_passado_pelo_cliente 
ORDER BY (case when coluna_de_filtro >= valor_passado_pelo_cliente then 0 else 1 end),
        coluna de filtro  

 

Curti desta forma também.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra solução possível :

 

SELECT colunas 
FROM   tabela 
WHERE  coluna_de_filtro >= valor_passado_pelo_cliente 
ORDER BY (case when coluna_de_filtro >= valor_passado_pelo_cliente then 0 else 1 end),
        coluna de filtro  

 

Realmente esta função salvou a minha vida.

Estou postando o código que estou utilizando, é meio complexo mas vale a pena dar uma estudada.

  $busca = $this->_db->prepare("SELECT t.*,ct.identificacao AS categoria
FROM   trabalhos AS t INNER JOIN categoria_trabalhos AS ct ON t.idcategoria_trabalhos = ct.idcategoria_trabalhos
WHERE t.ativado=0 AND ct.identificacao = :ctIdentificacao
ORDER BY (case when t.identificacao >= :tIdentificacao then 0 else 1 end),
t.posicao");
           $busca->bindValue(':ctIdentificacao',$categoria,PDO::PARAM_STR);
           $busca->bindValue(':tIdentificacao',$trabalho,PDO::PARAM_STR);
           $busca->execute();

Compartilhar este post


Link para o post
Compartilhar em outros sites

O CASE em SQL só não faz a janta...

 

Senhor macaco gordo !

 

banner%2Bmacaco%2Bgordo.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.