Ir para conteúdo

POWERED BY:

Arquivado

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

Israel Elias

[Resolvido] order by

Recommended Posts

tenho uma tabela chamados 'links'

 

nesses links existe dois tipos os (links vip e os links normais)

 

links vip: são aqueles comprados e terão previlegios sobre os normais

links normais: são gratuitos e não possuiem nenhum tipo de previlegio

 

os link vip possui um campo chamado conta_vip (ser for link vip ele será conta_vip = '1', se não for vip será conta_vip = '0')

 

como está meu select:

SELECT * FROM links WHERE id ='$id' ORDER BY conta_vip DESC, id desc

 

neste caso a ordem será pela a conta vip e o id

 

agora queria saber o seguinte como organizar links conta_vip usando datas da sua compra como relação da organização no caso abaixo se o link possui menos que 20 dias ele é considerado uma conta_vip e ainda faz a organização por exemplo:

SELECT * FROM links WHERE id ='$id' ORDER BY (data_da_compra_vip <= 20 dias) DESC, id desc

 

tem como fazer isso??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar a função DATEDIFF para ter a diferença em dias desde a data da compra atá o dia atual:

 

SELECT * FROM links WHERE id ='$id' ORDER BY DATEDIFF(CURDATE(), data_da_compra_vip) DESC, id DESC

 

Mas no caso em questão pode ser usado da seguinte forma:

 

SELECT * FROM links WHERE id ='$id' ORDER BY (DATEDIFF(CURDATE(), data_da_compra_vip) <= 20) DESC, id DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixo eu ver se eu entedi o seu exemplo!

 

com estes 4 registros abaixo:

 

ID # titulo # data da compra do link

1 | minha empresa | 2012-02-02 00:00:00

2 | fala brasil | 2012-07-05 22:38:00

3 | manaus | 0000-00-00 00:00:00

4 | xica da silva | 2012-07-10 00:00:00

 

 

 

com a logica que você passou usando DATEDIFF a ordem ficaria assim:

 

ID # titulo # data da compra do link

2 | fala brasil | 2012-07-05 22:38:00

4 | xica da silva | 2012-07-10 00:00:00

3 | manaus | 0000-00-00 00:00:00

1 | minha empresa | 2012-02-02 00:00:00

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT * FROM links WHERE id ='$id'

ORDER BY

if( ( ( datediff(now(),data_da_compra_vip) >= 20 ) or ( conta_vip=1 ) ) ,1,0) DESC,

id desc

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tirei a comparação com ( conta_vip=1 ) e coloquei menor e igual a 20 no data_da_compra_vip. pois só quero saber se o link possui a data_da_compra_vip menor que 20 dias, isso vai dizer que este link ainda esta na ativa na compra vip por que e menor e igual a 20 dias!! entendeu?!

 

ai fiz assim

 

SELECT * FROM links WHERE id ='$id' ORDER BY if( ( ( datediff(now(),data_da_compra_vip) <= 20 ) ) ,1,0) DESC, id desc

 

*Com essa comparação if dentro do order by, se a comparação for verdadeira ele vai atribui 1(um) e ser for falso vai atribui (0)zero, correto????

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.