hinom 5 Denunciar post Postado Fevereiro 24, 2005 olá comunidade estou com um pequeno problema numa consulta no mysql eu preciso selecionar todos os registros de uma tabela e ordená-los de acordo com a data. mas existe uma regra porque é uma agenda de eventos. o que o script deveria fazer é ordenar em ordem crescente os registros cuja data é maior que a data de hoje e ao mesmo, na mesma consulta ordenar em ordem decrescente os registros cuja data seja menor que a data de hoje estrutura teste: CREATE TABLE agenda ( cod varchar(200) NOT NULL default '0', data_evento datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (cod) ) ENGINE=InnoDB; dados para teste: INSERT INTO agenda VALUES("20050223184534", "2005-06-20 15:40:00"); INSERT INTO agenda VALUES("20050223184533", "2005-05-12 15:30:00"); INSERT INTO agenda VALUES("20050223184532", "2005-02-22 13:40:00"); INSERT INTO agenda VALUES("20050223184531", "2005-01-23 13:10:00"); a instrução que chega mais próximo do que eu quero foi essa: SELECT cod, IF((data_evento <= DATE_SUB(NOW(), INTERVAL 15 hour)) ,CONCAT("|",data_evento) ,data_evento) AS data_evento FROM agenda ORDER BY data_evento ASC LIMIT 0,10 a condicional IF((data_evento <= DATE_SUB(NOW(), INTERVAL 15 hour)) ,CONCAT("|",data_evento) ,data_evento)concatena um caracter no valor data_evento dos registros cuja data é menor que hoje. ou seja, os eventos que já foram realizados.até aí tudo bem. mas a ordenação dos eventos realizados fica em ordem crescente. Eu preciso que retornem em ordem decrescente. retornará isso: 20050223184533 - 2005-05-12 15:30:00 20050223184534 - 2005-06-20 15:40:00 20050223184531 - |2005-01-23 13:10:00 20050223184532 - |2005-02-22 13:40:00 eu precisaria de alguma função para mudar a ordenação dos dados. no manual do mysql encontrei uma função, mas parece que não retorna corretamente. SELECT data_evento, GROUP_CONCAT(data_evento <= DATE_SUB(NOW(), INTERVAL 15 hour) ORDER BY data_evento DESC) AS novo FROM agenda GROUP BY data_evento ASC ORDER BY novo ASC LIMIT 0,10 GROUP_CONCAT(data_evento <= DATE_SUB(NOW(), INTERVAL 15 hour) ORDER BY data_evento DESC)Retornará "1" se a expressão 1 for verdadeira. Retornará "0" se for falsa. Até que funciona mas retorna o mesmo resultado da primeira instrução: 20050223184533 - 2005-05-12 15:30:00 20050223184534 - 2005-06-20 15:40:00 20050223184531 - 2005-01-23 13:10:00 20050223184532 - 2005-02-22 13:40:00 a intrução em negrito deveria retornar os dados em "azul" em ordem descrescente. mas não o faz... também não sei se estou fazendo certo. agradeço quem puder ajudar. obrigado pela atenção. Compartilhar este post Link para o post Compartilhar em outros sites
cassabarbosa 0 Denunciar post Postado Março 10, 2005 Acho q você precisa do operador UNION: http://dev.mysql.com/doc/mysql/en/union.html Seria algo assim: (SELECT data_evento FROM agenda WHERE data_evento>=NOW() ORDER BY data_evento ASC)UNION(SELECT data_evento FROM agenda WHERE data_evento<NOW() ORDER BY data_evento DESC) Pode ser q tenha algum erro de sintaxe, mas isso você mata né? Sucesso! Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Março 11, 2005 muito obrigado cassabarbosa Compartilhar este post Link para o post Compartilhar em outros sites