Jump to content


Photo

Criação E Ordenação De Arrays


  • Faça o login para participar
8 replies to this topic

#1 hbm

hbm

    Novato no fórum

  • Usuários
  • 11 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 05/01/2011, 14:20

Olá!! Estou com um problema com arrays........ Se alguém estiver disposto a dar uma mão, agradeço!

A questão é a seguinte:
1) Faço uma query no mySQL
2) Para cada registro encontrado, faço uma query várias vezes
3) Com while destes resultados, gero arrays dinamicamente para cada registro encontrado
3) Depois, preciso "misturar" todas essas arrays e exibir em ordem pelo campo "datahorario"

Na prática, está desta forma:

Na consulta, são identificadas em uma tabela todos os profissionais de uma empresa.
Em seguida, são identificados todos os compromissos de cada um destes profissionais, em suas respectivas tabelas, desta forma:

<?php

$tabela_empresa = "empresa_74";

$consulta_profissionais = mysql_query("SELECT id,tipo FROM $tabela_empresa WHERE tipo = 'profissional'");

while ($i = mysql_fetch_array($consulta_profissionais)) {

$profissional_id = $i[0];
$tabela_profissional = "usuario_".$profissional_id;

$consulta_compromissos = mysql_query("SELECT id,tipo,datahorario,tarefa FROM $tabela_profissional WHERE tipo = 'compromisso' ORDER BY datahorario DESC");

$todos = array();

while ($row = mysql_fetch_array($consulta_compromissos)) {

$id = $row[0];
$datahorario = $row[2];
$tarefa = $row[3];

$todos[] = array("datahorario" => $datahorario,
"tarefa" => $tarefa,
"id" => $id);

$c = count($todos);

for ($j=0; $j<$c; $j++) {
$all = array_merge($todos[$j]);
}

foreach ($all as $value) {
if ($value == "") {
echo "";
} else {
echo $value."<br />";
}
}

echo "<br />";

}

}

?>

Até aqui, estão sendo geradas arrays das tarefas de cada profissional, contendo os três campos cada. No momento de exibir as tarefas, são mostradas as tarefas de cada profissional, sendo que assim que termina de exibir o profissional "1", passa a exibir as tarefas do "2", e assim por diante.

O que preciso é "misturar" todas as tarefas de todos os profissionais e exibí-las ordenadas pelo campo "datahorario" de cada array.

Tem como??

#2 vitor.zehel

vitor.zehel

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Masculino
  • Localidade:Santos-SP
  • Interesses:ampliar conhecimento em C++,C#, PHP, JAVA e Andorid.

Posted 05/01/2011, 15:19

tentou fazendo INNER JOIN das duas tabela SELECT id,tipo FROM $tabela_empresa INNER JOIN $tabela_profissional ON ... WHERE tipo = 'profissional' ORDER BY datahorario DESC"
  • hbm likes this

#3 hbm

hbm

    Novato no fórum

  • Usuários
  • 11 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 05/01/2011, 15:29

Olá vitor! Obrigado pela resposta!

Olha, nunca fiz inner join, não sei fazer... e, na verdade, não são só duas tabelas.
A primeira (tabela "empresa_74") leva a consulta a diversas tabelas, pois são diversos profissionais e cada um com uma tabela.

Poderia ser mais específico em como fazer este inner join neste caso?

Abraço!

#4 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 05/01/2011, 15:42

Nos mostre as relações que as tabelas tem...
Assim podemos te mostrar melhor como fazer os joins.
  • hbm likes this
Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.

#5 hbm

hbm

    Novato no fórum

  • Usuários
  • 11 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 05/01/2011, 15:48

Olá André!!

As tabelas não possuem relações, "cada uma é cada uma"...hehe

A partir do campo "tipo" da tabela da empresa, com o valor "profissional", pego o ID e informo de forma dinâmica o nome da tabela de cada profissional.

Aí é feito um select na tabela de cada um procurando onde o campo "tipo" for igual a "compromisso".

Aí gero arrays para cada registro, com o formato: $todos = array(datahorario, tarefa, id)

Isso ajuda? :)

#6 vitor.zehel

vitor.zehel

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Masculino
  • Localidade:Santos-SP
  • Interesses:ampliar conhecimento em C++,C#, PHP, JAVA e Andorid.

Posted 05/01/2011, 16:11

pelo que entendi seu BD não está relacionado. Voce poderia relacionar as tabelas dos funcionarios com a tabela empresa ou a empresa vai ter mais de uma também.

#7 hbm

hbm

    Novato no fórum

  • Usuários
  • 11 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 05/01/2011, 16:20

Sim vitor, existem várias tabelas para as empresas, mas a cada consulta uma só é consultada.

As tabelas das empresas e dos profissionais são criadas pelo PHP quando cada um destes é cadastrado.
- Se cadastro uma nova empresa no sistema o PHP gera uma tabela para ela.
- Se cadastro um profissional na empresa o PHP também gera uma tabela para ele.

Uma vez fiz um teste de relacionar tabelas e tudo parou de funcionar, as consultas não retornavam mais nada. Tive que deletar as tabelas e criá-las de novo. Acho que a melhor maneira de eu seguir é com a criação de arrays e depois utilizar algo do tipo "array_merge" e algum tipo de "sort" pelo datetime...

mas, não estou conseguindo fazê-lo... :(

#8 vitor.zehel

vitor.zehel

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Masculino
  • Localidade:Santos-SP
  • Interesses:ampliar conhecimento em C++,C#, PHP, JAVA e Andorid.

Posted 05/01/2011, 16:41

só se voce fizer UNION das tabelas de funcionario
SELECT * FROM employees
UNION
SELECT * FROM employees2

#9 hbm

hbm

    Novato no fórum

  • Usuários
  • 11 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 05/01/2011, 18:08

vitor e André, muito obrigado pelo help!

Consegui uma forma +/- satisfatório de exibir os resultados.

O que fiz foi declarar a variável "$todos = array();" ANTES do primeiro while, aí o PHP reconheceu que todos os resultados devem ser tratados como uma coisa só.

Depois dei um "arsort($todos);" para ordenar...

Desta forma está exibindo legal os resultados ordenados pelo datetime da própria query no banco.

O único problema é que perdi minha paginação original, mas isso dá para contornar... :)

Valeu! Muito obrigado!




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq