Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 15
Sexo: Masculino

Loop de resultados com INNER JOIN

03-11-2013 11:27

[Corrigindo a dúvida]

Possuo um script de paginação de resultados muito bom, porém já tentei de diversas vezes fazer com que o mesmo faça uma consulta em 2 tabelas e mostre os resultados destas duas tabelas em ordem decrescente, porém tá difícil.. se alguém tiver uma sugestão... segue o código!

<?php error_reporting(E_ALL|E_STRICT); ini_set('display_errors', 1); /*  * Constantes usadas pela classe de conexão, poderia estar num arquivo externo.  */  // o dsn é a string para conexão com o PDO que pode variar de banco para banco  // Por isto, preste atenção que nesta string temos o driver, o host e o banco(dbname) defined('DSN') or define('DSN', 'mysql:host=localhost;dbname=BANCO'); defined('USUARIO') or define('USUARIO', 'root'); defined('SENHA') or define('SENHA', ''); /*  * Classe para paginação em PDO  */ class Paginacao_PDO {     public $paginador = 'go';         private $solicitador;     public $sql;     public $limite = 2;     public $quantidade = 9;          // Construtor carrega a string usada para como paginador     public function __construct()      {         $this->solicitador = ( isset ($_REQUEST["{$this->paginador}"]) )                                     ? $_REQUEST["{$this->paginador}"]                                     : 0 ;             }     // Conexão privada     private function conexao()     {         $conexao = new Conexao();         $con = $conexao->conexao;         return $con;     }     // Retorna o número de resultados encontrados         public function resultado()     {         $this->resultado = $this->conexao()->query(str_replace('*', 'COUNT(*)', $this->sql));         $this->numeroResultados = $this->resultado->fetchColumn();         return $this->numeroResultados;     }     // Imprime um texto amigável mostrando o status das paginas em relação ao resultado atual     public function imprimeBarraResultados()     {                 if($this->resultado() > 0) {             echo '<!--<p class="info_resultado_busca">';             echo 'Exibindo página <b style="font-size:20px">' . $this->paginaAtual()  . '</b> de <b style="font-size:20px">' . $this->paginasTotais() . '</b> disponíveis para <b style="font-size:20px">'.$this->resultado().'</b> resultados encontrados.</p>-->';         } else {             echo '<p class="info_resultado_busca">Não foram encontrados resultados para sua busca.</p>';         }         }         // Calcula o número total de páginas     public function paginasTotais()     {                 $paginasTotais = ceil($this->resultado() / $this->limite);         return $paginasTotais;     }     // Procura o número da página Atual     public function paginaAtual()     {         if (isset($this->solicitador) && is_numeric($this->solicitador)) {                      $this->paginaAtual = (int) $this->solicitador;         } else {             $this->paginaAtual = 1;         }         if ($this->paginaAtual > $this->paginasTotais()) {             $this->paginaAtual = $this->paginasTotais();         }         if ($this->paginaAtual < 1) {             $this->paginaAtual = 1;         }         return $this->paginaAtual;              }     // Calcula o offset da consulta     private function offset()     {         $offset = ($this->paginaAtual() - 1) * $this->limite;             return $offset;     }     // Retorna o SQL para trabalhar posteriormente     public function sql()     {         $sql = $this->sql .  " LIMIT {$this->limite} OFFSET {$this->offset()} ";         return $sql;     }     // Imprime a barra de navegação da paginaçaõ     public function imprimeBarraNavegacao()      {         if($this->resultado() > 0) {                     echo '<div id="navegacao_busca">';             if ($this->paginaAtual() > 1) {                 echo " <a href='?" . $this->paginador . "=1"  . $this->reconstruiQueryString($this->paginador) . "' class='btn btn-mcrj'><b>Primeira</b></a> ";                 $anterior = $this->paginaAtual() - 1;                 echo " <a href='?" . $this->paginador . "=" . $anterior . $this->reconstruiQueryString($this->paginador) . "' class='btn btn-mcrj'><b>Anterior</b></a> ";             }                          for ($x = ($this->paginaAtual() - $this->quantidade); $x < (($this->paginaAtual() + $this->quantidade) + 1); $x++) {                 if (($x > 0) && ($x <= $this->paginasTotais())) {                     if ($x == $this->paginaAtual()) {                         echo " <b class='btn btn-mcrj'>$x</b> ";                     } else {                         echo " <a href='?" . $this->paginador . "=" . $x . $this->reconstruiQueryString($this->paginador) . "' class='nobutton'>$x</a> ";                     }                 }             }                          if ($this->paginaAtual() != $this->paginasTotais()) {                 $paginaProxima = $this->paginaAtual() + 1;                 echo " <a href='?" . $this->paginador . "=" . $paginaProxima . $this->reconstruiQueryString($this->paginador) . "' class='btn btn-mcrj'><b>Próxima</b></a> ";                 echo " <a href='?" . $this->paginador . "=" . $this->paginasTotais() . $this->reconstruiQueryString($this->paginador) . "' class='btn btn-mcrj'><b>Última</b></a> ";             }                          echo '</div>';                     }         }     // Monta os valores da Query String novamente     public function reconstruiQueryString($valoresQueryString) {         if (!empty($_SERVER['QUERY_STRING'])) {             $partes = explode("&", $_SERVER['QUERY_STRING']);             $novasPartes = array();             foreach ($partes as $val) {                 if (stristr($val, $valoresQueryString) == false)  {                     array_push($novasPartes, $val);                 }             }             if (count($novasPartes) != 0) {                 $queryString = "&".implode("&", $novasPartes);             } else {                 return false;             }             return $queryString; // nova string criada         } else {             return false;         }     }          }  // Você pode criar outra forma de conexão se desejar class Conexao {     private $_usuario;     private $_senha;     private $_dsn;          public function __construct()     {         $this->defineUsuario(USUARIO);         $this->defineSenha(SENHA);         $this->defineDSN(DSN);             $this->abreConexao();     }     // Define o Usuário     public function defineUsuario($usuario)     {         $this->_usuario = $usuario;     }     // Define a Senha             public function defineSenha($senha)     {         $this->_senha = $senha;     }     // Define o DSN             public function defineDSN($dns)     {         $this->_dsn = $dns;     }     // Abre a conexão sem retornar a mesma     public function abreConexao()     {         $this->conexao = new PDO($this->_dsn, $this->_usuario, $this->_senha);         $this->conexao->query("SET NAMES utf8");     }     // Fecha a conexao     public function fechaConexao()     {         $this->_conexao = null;     } } // Para trabalharmos externamente à classe Paginacao_PDO $conexao = new Conexao(); $conexao = $conexao->conexao; // Iniciamos a paginacao $paginacao = new Paginacao_PDO(); $paginacao->sql = "SELECT * FROM minhatabela ORDER BY id DESC"; // Status dos Resultados $paginacao->imprimeBarraResultados(); // A partir do método sql() de Paginacao_PDO // Vamos listar os resultados $res = $conexao->query($paginacao->sql()); while($r = $res->fetch(PDO::FETCH_OBJ)){ $titulo = $r->titulo; echo $titulo; }      echo '<div class="clear"></div>';     // Barra de Navegação $paginacao->imprimeBarraNavegacao(); ?>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17737
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Loop de resultados com INNER JOIN

03-11-2013 15:16

Só para o inner join, você pode usar esse exemplo Como-usar-o-innerjoin-no-MySQL_19_6812.html

Seria aplicar esse código a query principal da consulta. Para ordem decrescente você tem que adicionar

ORDER BY suacoluna DESC

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 15
Sexo: Masculino

Loop de resultados com INNER JOIN

03-11-2013 20:22

Bem realmente eu já tentei usando o INNER JOIN porém ele ainda não resgata os valores. Acredito que pode ser algo no script limitando esta consulta.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17737
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Loop de resultados com INNER JOIN

03-11-2013 21:52

Tem um limite ai na consulta

public $limite = 2; 

Não sei se seria referente ao que procura. Teria que ver com quem forneceu o script.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 15
Sexo: Masculino

Loop de resultados com INNER JOIN

04-11-2013 10:07

Bem, na verdade eu coloquei esse limite porque não tenho muitos registros na tabela. Pra falar a verdade eu tenho 4 registros na tabela1 e 2 registros na tabela2. Então eu limitei a paginação apenas para 2 registros por página. A intenção é fazer com que seja feito uma paginação com as duas tabelas, exibindo os 6 registros no total de acordo com a data de cadastro com ordenagem decrescente, mais já tentei de diversas maneiras utilizar o INNER JOIN com isso e não funciona =/
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17737
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Loop de resultados com INNER JOIN

04-11-2013 21:27

0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado