Ir para conteúdo

Arquivado

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

zombie

ordenar resultado, ORDER BY não funciona

Recommended Posts

Galera é o seguinte to tentando ordenar os dados na minha consulta mas não está funcionando, pelo que me parece ele esta ordenando em grupos, alguma sugestão?

agradeço desde ja´

att

$sql1 = mysql_query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tabela1' AND table_schema = 'bd1' AND COLUMN_NAME LIKE 'teste_%'");
    while ($d1 = mysql_fetch_array($sql1)) {
        $d_res = trim($d1["COLUMN_NAME"]);
$res = mysql_query("SELECT * FROM tabela1 WHERE $d_res != '' ORDER BY nome ASC ");
    while ($d2 = mysql_fetch_array($res)) {
echo" ".$d2['nome']." ";
    }
    }    

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pq está lendo a tabela de metadados de colunas ?

Talvez falte um ORDER BY na consulta dos metaddos, ORDER BY 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Galera é o seguinte to tentando ordenar os dados na minha consulta mas não está funcionando, pelo que me parece ele esta ordenando em grupos, alguma sugestão?

 

agradeço desde ja´

 

att

 

$sql1 = mysql_query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tabela1' AND table_schema = 'bd1' AND COLUMN_NAME LIKE 'teste_%'");
    while ($d1 = mysql_fetch_array($sql1)) {
        $d_res = trim($d1["COLUMN_NAME"]);
$res = mysql_query("SELECT * FROM tabela1 WHERE $d_res != '' ORDER BY nome ASC ");
    while ($d2 = mysql_fetch_array($res)) {
echo" ".$d2['nome']." ";
    }
    }    

 

bom explicando o que preciso fazer, na "tabela1" sempre vai entrar novas colunas e para não ficar sempre atualizando o select eu fiz dessa forma acima, sql1 pego os nomes da coluna da tabela1,

 

e no "res" eu pego os dados que preciso que no caso são os nomes, ele faz tudo certinho, porem quando eu mostro o resultado ele nao ordena, eu coloquei ai no codigo o ORDER BY nome ASC para ordenar mas nao funciona, ele parece que ordena por blocos, nao sei explicar, só sei que nao funciona rs,

 

 

Motta tentei colocar também e não deu certo, alguma outra sugestão?

 

PS: tentei explicar da melhor forma, qualquer coisa pode perguntar que tento explicar melhor, desculpa qlq coisa,

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta em WHILE para cada coluna haverá uma saída.

 

Uma solução poderia montar um só sql com as diversas colunas obtidas da tabela de metadados.

SELECT * FROM TABELA WHERE COLUNA1 != ' ' OR COLUNA2 != ' ' ...

Mas é bom lembrar que não é comum ter de ser criar novas colunas em tabela, você pode estar com algum problema em sua modelagem de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema de montar somente um sql é que são muitas colunas, e da mais ou menos umas 4 linhas pra ter uma ideia, eu já fazia dessa forma, mas como algumas vezes vai precisar inserir colunas, vai que eu esqueça por isso pensei em fazer dessa forma porque dai sempre que entrar algum dado lá ele já fico meio que automático.

 

fora montar em um só sql tem alguma outra ideia? pensei em salvar os resultados em uma array e ordenar eles e depois mostrar na tela, mas nao sei se da pra ser feito dessa forma.

 

nao teria como agrupar todo o resultado pra ordenar?

 

vlww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o problema de um sql extenso !?

 

Seria isto ou executar N Sqls , um para cada coluna.

 

Não sei se este argumento de novas colunas vale pois uma nova coluna requer sempre alguma manutenção pois é um novo tipo de dado a ser tratado.

 

Ou, como vc falou ordenar o array de saída.

 

Boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é que cada vez que alguem inserir uma nova coluna, pode acontecer que eu nao veja para poder alterar o sql, por isso queria algo meio que automatico...

 

agora sobre a array só tenho a ideia nao sei se daria certo.

 

to sem ideias pra ordenar o resultado

 

 

qual a forma correta de gravar os dados de saida em array para poder tentar rodenar com o sort() ???[/size]

 

abs[/size]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ja que vc precisa fazer o sql desta forma lendo todas as colunss da tabela, eu faria como disse nao mais a chama de um sql para cada coluna e sim "engordaria" o sql para testar todas as colunas da tabela, ao final do primeiro while ai sim executaria a segunda sql.

 

Seria apenas uma execucao e um ORDER BY.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi muito bem a forma de ser feita, vou tentar aqui pra ver se consigo entender o que vc disse.


não consegui entender o que fazer, pode me dar uma ajuda? abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou nu tablet ruim de editar ...

 

 

No primeiro WHILE é executado um SELECT para cada coluna localizada

 

Mude para

 

Cada linha do WHILE "engorda" a string que monta o SELECT para cada coluna da tabela

Coluna1 != ' ' or coluna2 != ' ' or ...

Na saída deste WHILE este select montado é executado ums só vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas daí se um dia eu inserir alguma coluna vou ter que alterar o codigo novamente,

 

como faria pra ficar meio que automatico?

 

 

Galera não consegui resolver o problema ainda, alguem pode me dar uma ajuda ai, to perdido aqui.

 

vlwww

 

 

Galera, desculpa postar novamente, mas estou sem ideias para resolver essa questão, alguem pode me dar uma ajuda, tentei fazer o que o amigo Motta disse acima mas nao consegui.

 

vlwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou nu tablet ruim de editar ...

 

 

No primeiro WHILE é executado um SELECT para cada coluna localizada

 

Mude para

 

Cada linha do WHILE "engorda" a string que monta o SELECT para cada coluna da tabela

Coluna1 != ' ' or coluna2 != ' ' or ...

Na saída deste WHILE este select montado é executado ums só vez.

 

Do jeito que o Motta falou...

 

Separa os dois whiles.

 

No primeiro, concatena as colunas:

$c++;
if($c > 1) {
    $d_res .= ', ';
}
$d_res .= trim($d1["COLUMN_NAME"]);

Retornará: coluna1 != '', coluna2 != '', coluna3 != '.....

OBS.: Fiz um contador pra saber se é preciso colocar a vírgula antes do campo ou não.

 

No segundo, faz a busca:

SELECT * FROM tabela1 WHERE '.$d_res.' ORDER BY nome

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.