Ir para conteúdo

POWERED BY:

Arquivado

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

Lucas Santos Amorim

Requisições SQL

Recommended Posts

Olá pessoal!

 

Gostaria da sugestão de vocês para um pequeno problema com requisições.

A questão é a seguinte:

Tenho em um banco de dados algumas tabelas relacionadas.

Algumas dessas tabelas são as tabelas empresa e imagens da empresa.

 

A tabela EMPRESA tem as colunas ID, NOME, ENDEREÇO, TELEFONE...

A tabela EMP_IMAGENS tem as colunas ID, IMAGEM, ID_EMPRESA.

 

Minha intenção é fazer somente uma requisição e buscar todas as empresas e as respectivas imagens de cada uma delas.

 

Estou usando o Inner Join para buscar no Banco de Dados.

Ex: SELECT * FROM EMPRESA inner join EMP_IMAGENS on EMPRESA .ID = EMP_IMAGENS.emp_empresas_id

 

Depois de fazer a requisição, preciso usar um foreach ou while dentro do while de cada empresa para listar as imagens com o id da empresa.

 

Obrigado desde já!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Lucas Santos Amorim, para uma melhor participação na criação de seus tópicos, vide as orientações abaixo;

 

 

Tópico movido para área correta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu select traz os resultados esperados ? abra o phpMyadmin e execute essa mesma query nele, e veja se os dados retornados são os esperados

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, o resultado retorna da seguinte forma:

 

ID da Empresa : Imagens da Empresa

1 : img01

1 : img02

1 : img03

1 : img04

2 : img01

2 : img01

2 : img01

3 : img01

3 : img02

3 : img03

...

 

Sobre o SQL está tudo bem.

 

O que estou tentando fazer é dentro do Loop de cada empresa listar as imagens da empresa em PHP sem precisar fazer outra requisição, aproveitando assim os dados da requisição com inner join.

 

O resultado seria algo parecido com isso daqui:

 

{ Empresa com ID 1

img01 da empresa ID 1, img02 da empresa ID 1 , img03 da empresa ID 1, img04 da empresa ID 1 }

 

{ Empresa com ID 2

img01 da empresa ID 2, img02 da empresa ID 2, img03 da empresa ID 3 }

 

{ Empresa com ID 3

img01 da empresa ID 3, img02 da empresa ID 3, img03 da empresa ID 3 }

...

 

Estou usando PHP mysqli.

Gostaria de fazer isso sem usar um SELECT dentro do outro.

Não estou sabendo é separar esses dados dentro de um outro Loop com While ou Foreach.

 

Desde já, muito obrigado pela disposição em ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta você fazer o while normal para trazer os dados com mysqli_fetch_assoc e cada empresa terá sua respectiva imagem sem problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente!

 

Trago os dados com while usando mysqli_fetch_assoc.

Os resultados que trago tanto no Banco de Dados como no PHP estão vindo como na imagem inserida como anexo.
 

O que não quero é usar um SELECT para as empresas e outro SELECT para as imagens dentro do primeiro SELECT.

Isso está errado e consumindo mais recursos do servidor.

 

Por isso estou usando INNER JOIN para juntar informações das duas tabelas.

Mas depois de listar o resultado com INNER JOIN, eu preciso separar as imagens relacionadas com cada empresa usando o PHP.

 

A ideia do resultado seria essa:

 

{ Empresa com ID 1

img01 da empresa ID 1, img02 da empresa ID 1 , img03 da empresa ID 1, img04 da empresa ID 1 }

 

{ Empresa com ID 2

img01 da empresa ID 2, img02 da empresa ID 2, img03 da empresa ID 3 }

 

{ Empresa com ID 3

img01 da empresa ID 3, img02 da empresa ID 3, img03 da empresa ID 3 }

...

 

 

Sem Título-1.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu entendi. Você pode fazer uma consulta só para pegar empresas, dentro do while você faria outra consulta pegando as imagens delas de acordo com o ID das empresas que forem listando.

 

De forma direta, ainda não pensei em algo para reordenar esses arrays.

 

Utilizando dois laços seria algo tipo:
 

$sql = mysql_query("SELECT * FROM EMPRESA");

while($dados = mysql_fetch_assoc($sql)){

        $sql2 = mysql_query("SELECT * FROM EMP_IMAGENS WHERE emp_empresas_id =".$dados['id']);

              echo $dados['nome'].'<br>';

        while($img = mysql_fetcg_assoc($sql)){

               echo $img['imagem'].'<br>';

        }
              echo '<hr>';

}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda e disposição Alaerte.

Mas eu penso o seguinte, se eu usar mais um laço para cada empresa, eu posso perder muito em performance.

Ex: Se eu tive 100 empresas, desse jeito o sistema fará mais 100 requisições.

 

Tem alguma forma de eu conseguir o mesmo resultado sem fazer mais um laço para cada empresa?

Talvez usando INNER JOIN e depois separando o resultado com um forearch ou while, por exemplo?

 

Estou pesquisando uma forma de evitar requisições.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Tudo bem pessoal?
       
      No código abaixo, estou fazendo uma consulta nas tabelas, banners e banners_referencia
      Meu objetivo é trazer resultados com valores iguais ao nome da cidade declarada na $cidade ou resultados com a referencia Total.
      O problema é que está trazendo todos os resultados. Tenho 10 linhas, 1 com o nome da cidade e duas com o valor Total, então o resultado teria que ser de apenas 3 linhas, mas mostra tudo.
       
      $banner = "SELECT A.*, B.* FROM banners A, banners_referencia B WHERE B.cod_referencia = A.cod_referencia AND A.cidade = '$cidade' OR B.referencia = 'Total' ORDER BY RAND()";
      $banner = mysqli_query($conexao, $banner) or die ("Banner não encontrado");
      while($busca= mysqli_fetch_array($banner)){
          print $busca['cidade'].'<br>';
      };
       
      Alguém consegue me ajudar?
    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.