Jump to content


Squall Robert's Content

There have been 53 items by Squall Robert (Search limited from 10/06/2023)



Ordernar por                Order  

#1017655 Pesquisa No Mysql - 2 Tabelas Ao Mesmo Tempo...

Posted by Squall Robert on 26/03/2012, 10:45 in PHP

Se você é iniciante em Bancos de Dados ou ainda tem dúvidas sobre a utilização de Joins entre tabelas, saiba que o procedimento é mais simples do que parece. Basta entender pra que serve cada tipo de join e como eles trabalham. Sua experiência e persistência se encarregarão de lhe ensinar qual utilizar nas situações do cotidiano.

Programas Utilizados
- Bancos de Dados (Firebird, Interbase, MySQL, etc.)
- Gerenciador de Bancos de Dados (IBExpert, IBOConsole, IBConsole, etc.)
- Tabelas abaixo
FILIAL
FIL_CODIGO FIL_NOME
1 MATRIZ
2 FILIAL 1
3 FILIAL 2

FUNCIONARIOS
FUN_CODIGO FIL_CODIGO FUN_NOME
1 1 JOÃO
2 2 JOAQUIM
3 2 JOSÉ
4 3 MÁRCIO
5 null PEDRO
Pequena História
Na verdade, utilizamos palavras em inglês, padronizadas pela ANSI (American National Standards Institute), originalmente criada pela IBM com o nome de SEQUEL (Structured English Query Language) e posteriormente abreviada para SQL, para efetuar consultas de dados a um banco de dados relacional. Mas o que vem a ser um Join? Esta palavra em inglês significa Unir ou União e a utilizamos quando precisamos buscar dados em outras tabelas desde que satisfaça as condições para isso.
Porém ainda paira a dúvida: utilizo Join, Inner Join, Left Join, Right Join ou me jogo do 14º Andar?
Esta história de direita e esquerda funciona em qualquer banco de dados relacional pois são padrões definidos para se manter a compatibilidade entre os bancos de dados. Imagine você como seria se para fazer uma busca no Firebird você tivesse de escrever:
SELECT * FROM FUNCIONARIOS
WHERE FIL_CODIGO = 1

E no DB2 fosse completamente diferente:
FROM FUNCIONARIOS WHERE FIL_CODIGO = 1 SELECT *

Isto certamente causaria um "Access Violation" em sua cabeça.
Vamos ao que interessa.

Entendendo LEFT, RIGHT e INNER
Quando dizemos que a tabela será Left ou Right, estamos informando ao comando SQL que ele deve obedecer o sentido para a Direita ou para a Esquerda, ou seja, ao utilizarmos Left Join o banco de dados irá analisar a estrutura da tabela da Direita e comparar com a tabela da Esquerda (leia-se Direita para a Esquerda), veja o desenho.


Left Join
Na primeira situação temos o Left Join, a seta está apontando para a tabela FUNCIONARIOS simbolizando que a precedência é da tabela da Esquerda, então podemos dizer que no select abaixo, serão listados todos os Funcionários, mesmo aqueles que não tem Filial cadastrada.
SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A
LEFT JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO

-- RESULTADO DA CONSULTA --
FUN_NOME FIL_NOME
JOÃO MATRIZ
JOAQUIM FILIAL 1
JOSÉ FILIAL 1
MÁRCIO FILIAL 2
PEDRO null
Repare que Pedro foi incluído no resultado, porém ele não possui uma Filial associada em seu cadastro. Este tipo de Join é o mais utilizado quando não se tem certeza que todos os registros possuem ligação entre as tabelas e também na maioria das vezes por questões de desempenho.
Right Join
Na segunda situação foi utilizado o Right Join, também conhecido apenas por Join, que aponta para a tabela FILIAL simbolizando a precedência da tabela da Direita, logo, concluímos que os dados da tabela Filial devem existir para que o registro seja trazido no Select.
SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A
RIGHT JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO
-- AINDA PODEMOS UTILIZAR SEM A PALAVRA RIGHT
/*
SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A
JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO
*/

-- RESULTADO DA CONSULTA --
FUN_NOME FIL_NOME
JOÃO MATRIZ
JOAQUIM FILIAL 1
JOSÉ FILIAL 1
MÁRCIO FILIAL 2
Note que o funcionário Pedro desta vez não foi incluído na lista de resultados, isto ocorreu porque esta consulta traz apenas registros onde existe um cadastro de Filial para o Funcionário.

Inner Join
Temos ainda a situação do Inner Join que nada mais faz do que observar se existem registros combinados em ambas as tabelas, ou seja, para que um registro seja incluído na lista de resultados, o campo de ligação entre duas tabelas deve satisfazer as condições em ambas. O resultado desta consulta seria algo muito semelhante ao Join.

Conclusão
Com algum conhecimento básico para interação entre tabelas, podemos efetuar consultas complexas ao banco de dados envolvendo resultados perfeitamente controlados. Isto garante não somente credibilidade em consultas mas também desempenho do sistema quando utilizado corretamente. Ainda existem outros tipos de Join, porém seus resultados são semelhantes ou seu uso é muito pouco frequente. Para quem quiser saber mais a respeito de consultas SQL, basta ler um livro de Banco de Dados (qualquer um que seja pois todos tem muito conteúdo sobre PL/SQL).



#1017621 Erro Include Arquivo

Posted by Squall Robert on 23/03/2012, 16:16 in PHP

qual a estrutura de diretorios ...

colocar ai para entender como esta sendo feitos os includes....



#1017625 Erro Include Arquivo

Posted by Squall Robert on 23/03/2012, 19:16 in PHP

bom considerando que tudo esta dentro do INDEX...

tudos os includes tem que partir do INDEX

ou seja dentro do produtos vc tem que referencia o diretorio tb

tipo include('modulos/arquivo.php');

se vc dentro do modudos for inserir alguma coisa tem que pensar que isso vai esta dentro da index

sendo assim


tipo include('pasta/arquivo.php');



#1019380 Upload De Imagens Com Redimensionamento De Tamanho Especifico

Posted by Squall Robert on 11/09/2012, 14:09 in PHP

eu criei esta classe pra isso

<?php
/**
 * @author squall
 * @copyright 2009
 */
class Thumbs
{
	//variaveis necessárias para gerar thumbs
	public $caminho;
	public $nome ;
	public $largura_max;
	public $altura_max;
	public $arquivo;
	public $ext;
	public $tipo ;
	public $ImagemGerada;
	public function Thumbs()
	{
		// definindo valores padrão de variaveis
		$this->tipo = 1;
		$this->nome = date('YmdHis');
		$this->altura_max = 80;
		$this->largura_max = 250;
	}
	//preparando imagem
	public function Prepare()
	{
		// verifica imagem se existe
		if(file_exists($this->arquivo))
		{
			// gerando nome da nova imagem
			$this->NomeImagem();
            if($this->arquivo != $this->ImagemGerada)
            {
                $img_tamanho = @getimagesize($this->ImagemGerada);
                
                if(!file_exists($this->ImagemGerada) || $img_tamanho[0] > $this->largura_max || $img_tamanho[1] > $this->altura_max)
    			{
    					// pegando extensão da imagem
    					$this->ext = substr($this->arquivo,-3);
    					// verificando se o caminho e existente/ se não cria diretório
    					$this->CriarDir();
    					// gerando imagem
    
    					$this->Gerar();
    
    					return $this->ImagemGerada;
    			}
    			else
    				return $this->ImagemGerada; // retorno da imagem existente
            }
            else
            {
    			// pegando tamanho da imagem
    			$img_tamanho = @getimagesize($this->arquivo);
    			if(!file_exists($this->ImagemGerada) || $img_tamanho[0] > $this->largura_max || $img_tamanho[1] > $this->altura_max)
    			{
    					// pegando extensão da imagem
    					$this->ext = substr($this->arquivo,-3);
    					// verificando se o caminho e existente/ se não cria diretório
    					$this->CriarDir();
    					// gerando imagem
    
    					$this->Gerar();
    
    					return $this->ImagemGerada;
    			}
    			else
    				return $this->ImagemGerada; // retorno da imagem existente
            }
		}
		else
			return false; //retorna false se o arquivo nao for encontrado
	}
	// Gerador de Thumbs
	public function Gerar()
	{
		// se extesão for jpg
		if($this->ext == "jpg")
		{
			$imagem_orig = @imagecreatefromjpeg($this->arquivo);
		}
		elseif($this->ext=="png")
		{
			$imagem_orig = @ImageCreateFromPNG($this->arquivo);
		}
		elseif($this->ext=="gif")
		{
			$imagem_orig = @ImageCreateFromGIF($this->arquivo);
		}
		// pegando tamanhos da imagem
		$largura_original = @ImagesX($imagem_orig);
		$altura_original = @ImagesY($imagem_orig);

		$altura = $altura_original;
		$largura = $largura_original;

		if( $largura > $this->largura_max)
		{
			$largura = $this->largura_max;
			$altura = $altura * ($largura / $largura_original);

		}
		if($altura > $this->altura_max)
		{
			$largura = $largura * ($this->altura_max/$altura);
			$altura  = $this->altura_max;
		}

		//gerando imagem final
		$imagem_final=@ImageCreateTrueColor($largura,$altura);
		@ImageCopyResampled($imagem_final,$imagem_orig, 0, 0, 0, 0,$largura,$altura,$largura_original,$altura_original);
		$imagem_ext=@substr($this->arquivo,-3);
		// gerando arquivo
		if(strtolower($this->ext=="jpg"))
			@imagejpeg($imagem_final,$this->ImagemGerada,80);
		if(strtolower($this->ext == "png"))
			@imagepng($imagem_final,$this->ImagemGerada);
		if(strtolower($this->ext == "gif"))
			@imagegif($imagem_final,$this->ImagemGerada);
		// destruindo informações desnecessárias
		@imageDestroy($imagem_orig);
		@imageDestroy($imagem_final);
		//retornando caminho da nova imagem
	}
	public function CriarDir()
	{
		if(!is_dir($this->caminho))
		{
			mkdir($this->caminho,0777);
		}
	}
	public function NomeImagem()
	{
		//pegando nome original da imagem
		$imagemLimpando = @explode("/",$this->arquivo);
		$imagemNome = $imagemLimpando[(count($imagemLimpando) - 1)];
		// se o tipo for  igual a 1 ele usa o nome original da imagem
		// se não ele usa o timestamp para gerar um nome unico
		if($this->tipo == 1) $imagem_gerada=$this->caminho . $imagemNome;
		else $imagem_gerada = $this->caminho . $this->nome . "." .  $this->ext;
		$this->ImagemGerada = $imagem_gerada;
        
       // echo "ESTA E A IMAGEM GERARAD" . $this->ImagemGerada . "<BR>";
	}
}
?>

para usar basta fazer isso

	//$thumbs = new Thumbs();
	//$thumbs->caminho = "imagens/logomarcas/";
	//$thumbs->arquivo = $_SESSION['usuario']['configuracoes']['arquivo_logomarca'];
	//$imagem = $thumbs->Prepare();



#1019260 Filtrar Dados

Posted by Squall Robert on 24/08/2012, 11:39 in PHP

Executa o form com o print do SQL e cola ai pra vermos o que ele esta escrevendo na query....



#1019309 Filtrar Dados

Posted by Squall Robert on 30/08/2012, 17:42 in PHP

select a.id, a.pedidofisico, a.data, a.cliente, a.cpf_cnpj, a.data, b.id_pedido, b.valorun, b.valorreal, b.precodif, b.produto, b.qtd, b.qtd1, b.saldo from pedido a, pedido_itens b where a.pedidofisico = '263068' AND a.pedidofisico = b.id_pedido order by a.id DESC

e no banco existe o pedido do resultado



select 
a.id, 
a.pedidofisico, 
a.data, 
a.cliente, 
a.cpf_cnpj, 
a.data, 
b.id_pedido, 
b.valorun, 
b.valorreal, 
b.precodif, 
b.produto, 
b.qtd, b.qtd1, 
b.saldo 
from pedido a
INNER JOIN  pedido_itens b ON (a.pedidofisico = b.id_pedido)
where a.pedidofisico = '263068' 
order by a.id DESC

aparentement esta normal...

mas precisa ver os GET´S para entender como isso esta chegando...



#1019378 Verificar Se O Registro Já Existe

Posted by Squall Robert on 11/09/2012, 14:02 in PHP

você pode usar INSER ON UPDADE
isso faz com que se existir ele atualiza se nao insere...
mas no seu caso e mais simples....

faz uma consulta e com o resultado vc verifica se tem ou nao ....



#1019292 Filtrar Dados

Posted by Squall Robert on 28/08/2012, 11:18 in PHP

resultado foi:

Resource id #7


tira o mysqlquery

e imprime



#1019401 Charset Para Variáveis Php

Posted by Squall Robert on 13/09/2012, 18:27 in PHP

cada editor tem um charset proprio, que não e mostrado independete do tipo de charset que vc escolheuno codigo fonte, se vc criar o documento com UTF-8 deve resolver com seu codigo...



#1017634 Ignorar Caractéres Com Assento Numa Pesquisa

Posted by Squall Robert on 24/03/2012, 09:44 in PHP

sim, é a mesma coisa.

mas como a busca la dve estar com %% no incio ele vai trazer tudo que contenha a

então coloca 'a%'

ai ele vai trazer tudo que começa com a


não esquece de clicar no Sinal de MAIS NO CANTO DO POST para dizer que foi ultil para vc



#1017635 Somar Coluna

Posted by Squall Robert on 24/03/2012, 09:45 in PHP

tenta zerar a variavel antes do proximo resultado


mas coloca o codigo inteiro para entender melhor



#1017560 Erro Undefined Variable

Posted by Squall Robert on 20/03/2012, 16:12 in PHP

posta este documento categoria_form_alterar.php

para eu ver como esta



#1017624 Ignorar Caractéres Com Assento Numa Pesquisa

Posted by Squall Robert on 23/03/2012, 19:13 in PHP

veja se isso resolve

http://www.drsolutio...gesxp_mysql.pdf



#1017549 Erro Undefined Variable

Posted by Squall Robert on 20/03/2012, 14:13 in PHP

olá amigo, notice , não necessáriamente é um erro.
a mesagem esta avisandoque você não definiu a variavel.
vc pode definir no seu php para não exibir os notices.


mas de qualquer forma é so definir a variavel .

e o arquivo que esta com erro vc não postou.



#1019379 Pula Sequencia De Registro

Posted by Squall Robert on 11/09/2012, 14:07 in PHP

ORDER BY id DESC

faça um looping com resultado e compare....



#1017610 Ajuda Com Criação De Ranking

Posted by Squall Robert on 22/03/2012, 19:00 in PHP

Clica no maiszinho ali do post para dezer que te ajudou



#1017602 Ajuda Com Criação De Ranking

Posted by Squall Robert on 22/03/2012, 13:28 in PHP

vc vai ter que tratar isso no php

dentro do lopping vc quarda os valores de cada item que passa em variaveis para comparar com o proximo.

como vc estar rodenando vai estar sempre na ordem correta.

ai é so comparar se os dados que definema ordem sãoi iguais e so atribuir o mesmo ranking

mais ou menos isss


rankking = 0;
$var_vitorias = '';
$var_potnos = '';
while(// lopping com os dados)
{
  if($var_vitorias == $dados['vitoria'] && $var_potnos == $dados['pontos'])
  { 
     $rannking = $rankking;
  }
  else 
  { 
    $rankking++;
  }
  
  echo $rankking . "º - ". $nome; . "<br>";

  $var_vitorias = $dados['vitoria'];
  $var_potnos = $dados['pontos'];

}




#1017547 Oportunidade Para Freelancer

Posted by Squall Robert on 20/03/2012, 14:08 in PHP

posso avaliar também , me adicionar ai no skype pra gente conversar...
meu skype squallrobert

atualmente trablaho no desenvolvimento de um sistema de rastreamento de veiculo, meu tempo e curto ..
mas aparentemente o sistema e pequeno.. podemos ver qual a melhor forma.



#1017558 Atualizar Ereg_Replace

Posted by Squall Robert on 20/03/2012, 16:07 in PHP

se não me engano o preg_replace e o cara... mas tem um metodo diferente de usar ....
consulte o php.net



#1019400 Problema Com Inner Join

Posted by Squall Robert on 13/09/2012, 18:22 in PHP

na verdade o correto e fazer com uma consulta so...
e tratar dentro do laço de reptição


dentro do while ou foreach

vc salva a id da categoria em um variavel e sempre checa

tipo de for = 0 ou diferente da vara que vc criou vc cria o item da lista que corresponde a categoria e adiciona o item nesta lista

se for igal a sua var vc so adiicona a lista

mais ou menos isso.ç..



#1019302 Formulário Php

Posted by Squall Robert on 30/08/2012, 11:37 in PHP

isso é simples de fazer ...

cria um form com nomes todos como vetor "[]"

ai so colocar em um form onde a quantidade do for é o numero que vc deseja criar de form...

quando vc der submit vc vai poder pegar os dados como vetor



#1017633 Contar Checkbox

Posted by Squall Robert on 24/03/2012, 09:39 in PHP

se for em php é simples, mas tem que fazer o post

seguindo o padrão todos checks tem que esta com o mesmo nome

assim name='lista[]'

ao postar ele envia todos seleiconados

ai é so fazer um looping e ir somando



#1019376 Erro: Object Of Class Requerimento Could Not Be Converted To String In

Posted by Squall Robert on 11/09/2012, 13:59 in PHP

da um print_r na variavel antes de serialzar e cola ai....



#1019261 Recuperar Valores Do Array

Posted by Squall Robert on 24/08/2012, 11:44 in PHP

bom se deu certo beleza... mas nao deu pra entender o codigo direito...

mas uma dica e você usar o foreach

assim

foreach($_SESSION['cart'] as $col => $row)
{
// aqui voce tem todos os itens do carrinho
// onde $col, corresponde a indice do item
// e $row o valor..

}



#1017562 Dias Da Semana, Cada Dia Uma Variável

Posted by Squall Robert on 20/03/2012, 16:19 in PHP

tabela pratos

tabela cardapio

cadastre todos os protado na tabela platos

na tabela cardapio vc coloca id_prato que vem da tabela pratos e coloca id referente ao dia da semana..
e valor e tal ...

ou seja para cada dia da semana tera 9 pratos de relaciomento.

ai e so mostrar da forma que vc quizer




IPB Skin By Virteq