Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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']." ";
}
}Pq está lendo a tabela de metadados de colunas ?
Talvez falte um ORDER BY na consulta dos metaddos, ORDER BY 1
>
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
Mostre a saída dos dados.
Gabriel
Tania
Ana
Andressa
Alexandre
Bruno
....
....
....
Ana Paula
Breno
etc
sai dessa forma
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.
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
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.
é 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]
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.
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
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.
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
>
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
hum entendi, vou tentar.
vlwww
Poderia explicar melhor? Diga o problema e também o que você deseja fazer na query.