• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

vitoque

utilizar if numa query

9 mensagens neste tópico

Boa tarde a todos, precisava de uma ajuda:

Tenho

Table -> produtos

Campos -> id,produto,data,estado

select * from produtos order by data desc

Quero fazer uma pesquisa e criar um "campo virtual" chamado "ordem" e dizer :

se o campo estado for activo ordem é 1 senao ordem é 2

fazer rand ao que for ordem 1 e o 2 ordenar por ordem de data crescente o ordem 2

é possivel ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Parece-me que estás a complicar um bocado as coisas .. Vamos la ver o seguinte: Cada entrada dessa tabela tem um estado, logo toda essa conversa do campo virtual, ordem, etc, não faz sentido nenhum. Podes ser um pouco mais explícito?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vejamos quero que no resultado aparece logo em primeiro os que estao activos e esses activos a fazer RANDOM entre eles e so posteriormente é que vinham os desactivos e ordenar por data descendente...

A historia do campo virtual(ordem) era para atribuir valores aos activos que ficariam com 1 e os desactivos com 2 e depois ordenaria por o campo ordem foi essa a ideia Yoda.pt, se calhar estou mesmo a complicar...

Boas,

Parece-me que estás a complicar um bocado as coisas .. Vamos la ver o seguinte: Cada entrada dessa tabela tem um estado, logo toda essa conversa do campo virtual, ordem, etc, não faz sentido nenhum. Podes ser um pouco mais explícito?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, já estou a ver.

O mais simples seria executar duas queries, ou seja :

SELECT * FROM produtos WHERE estado=1;

SELECT * FROM produtos WHERE estado=2 ORDER BY data DESC;

// Na primeira query :

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $tmp_list[] = $row 
}

array_shift($tmp_list)

foreach ($tmp_list as $row) {
    $list[] = $row;
}

// na segunda linha:

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $list[] = $row; 
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, já estou a ver.

O mais simples seria executar duas queries, ou seja :

SELECT * FROM produtos WHERE estado=1;

SELECT * FROM produtos WHERE estado=2 ORDER BY data DESC;

// Na primeira query :

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $tmp_list[] = $row 
}

array_shift($tmp_list)

foreach ($tmp_list as $row) {
    $list[] = $row;
}

// na segunda linha:

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $list[] = $row; 
}

Mas eu pretendia fazer tudo numa so query uma vez que pretendo usar paginação!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

vitoque, duvido que consigas (e caso consigas, será uma query de arrastar o servidor todo) ... se for uma lista ordenada pelo estado e data, é fácil, agora teres uma lista onde metade é aleatoriamente mostrado (o que consome muita memoria) e outra metade e ordenado pela data ..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas como tu disseste em cima é possivel fazer em duas query e depois fazer paginação? é que custumo fazer tudo numa so query!

vitoque, duvido que consigas (e caso consigas, será uma query de arrastar o servidor todo) ... se for uma lista ordenada pelo estado e data, é fácil, agora teres uma lista onde metade é aleatoriamente mostrado (o que consome muita memoria) e outra metade e ordenado pela data ..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É possível fazer certas coisas com queries dentro de outras, mas o problema que queres não me parece possível.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É possível fazer certas coisas com queries dentro de outras, mas o problema que queres não me parece possível.

Muito obrigado yoda.pt, caso alguem saiba alguma maneira que post.

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora