Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
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.
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.
>
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.
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.
>
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
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
>
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
>
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();O CASE em SQL só não faz a janta...
Senhor macaco gordo !
/applications/core/interface/imageproxy/imageproxy.php?img=http://3.bp.blogspot.com/_WrV9BqoM5gE/TUJa897HgNI/AAAAAAAAABs/XwOW0QNrj_o/s1600/banner%2Bmacaco%2Bgordo.jpg&key=5e6aa8f60cd693f4fb6fa8292bac761cb7e2575f7140c7257f0074dd840e649b" alt="banner%2Bmacaco%2Bgordo.jpg" />
>
O CASE em SQL só não faz a janta...
Senhor macaco gordo !
/applications/core/interface/imageproxy/imageproxy.php?img=http://3.bp.blogspot.com/_WrV9BqoM5gE/TUJa897HgNI/AAAAAAAAABs/XwOW0QNrj_o/s1600/banner%2Bmacaco%2Bgordo.jpg&key=5e6aa8f60cd693f4fb6fa8292bac761cb7e2575f7140c7257f0074dd840e649b" alt="banner%2Bmacaco%2Bgordo.jpg" />
Muito bem colocada.
kkkkkkkkkkkkkkk
Existe o ORDER BY é isto ?!