Ir para conteúdo

POWERED BY:

Arquivado

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

Annyh

fazer consulta em duas tabelas

Recommended Posts

ai galera,

 

tenho duas tabelas cb_comentarios e cw_destaque_va

 

quero fazer uma consulta por todos os dados na tabela cw_destaque_va e apenas o campo id_post da tabela cb_comentarios, até ai tudo bem, eu consigo fazer...

 

mas como eu exibo os dados?

 

eu estou usando PDO, e gostaria de saber como o PHP vai diferenciar de qual tabela eu estou chamando qual campo?

 

 

tipo assim, numa consulta simples eu faço assim e da certinho:

 

foreach ($resVa as $res) {
  $idVa = $res[0];
  $imgVa = $res[2];
  $autorVa = $res[4];
  $siteVa = $res[6];
  $tituloVa = $res[8];
  $textoVa = $res[9];					
  $categoria = $res[10];
  $comentarios = $res[11];										
  $dataVa = strftime('%d %b %Y', strtotime($res[12]));										
  $visitas = $res[15];
}

 

se eu der um echo por exemplo na variável $idVa, ele vai me mostrar o id da tabela cw_destaque_va ou cb_comentarios?

como eu vou diferenciar a chamada...

 

e se eu quiser mostrar o comentario da tabela cb_comentarios como faço?

assim?

 

$comentario = $res['comentario'];

 

e se existirem dois campos iguais nas duas tabelas, como diferencia-los na chamada (dando echo)? e ainda mais que chamo pelo indice do campo (número).

 

 

valeu galera.

Compartilhar este post


Link para o post
Compartilhar em outros sites
C:\Users\Andrey>cd ..

C:\Users>cd ..

C:\>cd \dev\mysql\bin\

C:\dev\mysql\bin>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.41 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database teste;
Query OK, 1 row affected (0.02 sec)

mysql> use teste;
Database changed
mysql> create table usuario(
   ->   id int( 11 ) not null,
   ->   nome varchar( 10 ) not null,
   ->   email varchar( 35 ) not null
   -> )Engine = MyISAM;
Query OK, 0 rows affected (0.06 sec)

mysql> create table fotos(
   ->    id int( 11 ) not null,
   ->    foto varchar( 42 ) not null,
   ->    comentario text not null,
   ->    data timestamp
   -> )Engine = MyISAM;
Query OK, 0 rows affected (0.04 sec)

mysql> insert into usuario values( 1, 'Andrey', 'andreykvital@gmail.com' ), ( 2, 'usuario', 'usuario@email.com' );
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into fotos values( 1, 'foto.jpg', 'um comentario', null );
Query OK, 1 row affected (0.00 sec)

mysql> insert into fotos values( 1, 'foto2.jpg', 'um comentario', null );
Query OK, 1 row affected (0.00 sec)

mysql> insert into fotos values( 1, 'foto3.jpg', 'um comentario', null );
Query OK, 1 row affected (0.00 sec)

mysql> insert into fotos values( 2, 'f.jpg', 'um comentario', null );
Query OK, 1 row affected (0.00 sec)

mysql> insert into fotos values( 2, 'f1.jpg', 'um comentario', null );
Query OK, 1 row affected (0.00 sec)

mysql> insert into fotos values( 2, 'f2.jpg', 'um comentario', null );
Query OK, 1 row affected (0.00 sec)

mysql> select * from usuario;
+----+---------+------------------------+
| id | nome    | email                  |
+----+---------+------------------------+
|  1 | Andrey  | andreykvital@gmail.com |
|  2 | usuario | usuario@email.com      |
+----+---------+------------------------+
2 rows in set (0.00 sec)

mysql> select * from fotos;
+----+-----------+---------------+---------------------+
| id | foto      | comentario    | data                |
+----+-----------+---------------+---------------------+
|  1 | foto.jpg  | um comentario | 2011-05-17 19:43:27 |
|  1 | foto2.jpg | um comentario | 2011-05-17 19:43:35 |
|  1 | foto3.jpg | um comentario | 2011-05-17 19:43:40 |
|  2 | f.jpg     | um comentario | 2011-05-17 19:43:51 |
|  2 | f1.jpg    | um comentario | 2011-05-17 19:43:55 |
|  2 | f2.jpg    | um comentario | 2011-05-17 19:44:00 |
+----+-----------+---------------+---------------------+
6 rows in set (0.00 sec)

mysql> select * from fotos inner join usuario on fotos.id = usuario.id;
+----+-----------+---------------+---------------------+----+---------+------------------------+
| id | foto      | comentario    | data                | id | nome    | email                  |
+----+-----------+---------------+---------------------+----+---------+------------------------+
|  1 | foto.jpg  | um comentario | 2011-05-17 19:43:27 |  1 | Andrey  | andreykvital@gmail.com |
|  1 | foto2.jpg | um comentario | 2011-05-17 19:43:35 |  1 | Andrey  | andreykvital@gmail.com |
|  1 | foto3.jpg | um comentario | 2011-05-17 19:43:40 |  1 | Andrey  | andreykvital@gmail.com |
|  2 | f.jpg     | um comentario | 2011-05-17 19:43:51 |  2 | usuario | usuario@email.com      |
|  2 | f1.jpg    | um comentario | 2011-05-17 19:43:55 |  2 | usuario | usuario@email.com      |
|  2 | f2.jpg    | um comentario | 2011-05-17 19:44:00 |  2 | usuario | usuario@email.com      |
+----+-----------+---------------+---------------------+----+---------+------------------------+
6 rows in set (0.00 sec)

mysql> select usuario.*, fotos.foto from fotos inner join usuario on fotos.id = usuario.id;
+----+---------+------------------------+-----------+
| id | nome    | email                  | foto      |
+----+---------+------------------------+-----------+
|  1 | Andrey  | andreykvital@gmail.com | foto.jpg  |
|  1 | Andrey  | andreykvital@gmail.com | foto2.jpg |
|  1 | Andrey  | andreykvital@gmail.com | foto3.jpg |
|  2 | usuario | usuario@email.com      | f.jpg     |
|  2 | usuario | usuario@email.com      | f1.jpg    |
|  2 | usuario | usuario@email.com      | f2.jpg    |
+----+---------+------------------------+-----------+
6 rows in set (0.02 sec)

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

     $PDO = new PDO( 'mysql:host=localhost;dbname=teste', 'root', '****' );
     $PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
     $PDO->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );
     $Query = $PDO->query( "select usuario.*, fotos.foto from fotos inner join usuario on fotos.id = usuario.id" )->fetchAll();
     echo '<pre>';
     foreach( $Query as $Data ){
       print_r( $Data ); 
     }

 

Saída:

Array
(
   [id] => 1
   [nome] => Andrey
   [email] => andreykvital@gmail.com
   [foto] => foto.jpg
)
Array
(
   [id] => 1
   [nome] => Andrey
   [email] => andreykvital@gmail.com
   [foto] => foto2.jpg
)
Array
(
   [id] => 1
   [nome] => Andrey
   [email] => andreykvital@gmail.com
   [foto] => foto3.jpg
)
Array
(
   [id] => 2
   [nome] => usuario
   [email] => usuario@email.com
   [foto] => f.jpg
)
Array
(
   [id] => 2
   [nome] => usuario
   [email] => usuario@email.com
   [foto] => f1.jpg
)
Array
(
   [id] => 2
   [nome] => usuario
   [email] => usuario@email.com
   [foto] => f2.jpg
)

 

So você dar uma olhada no sql que eu fiz para localizar os usuarios, se você presisar de um where, sem problema

mysql> select usuario.*, fotos.foto from fotos inner join usuario on fotos.id = usuario.id where usuario.id = 2;
+----+---------+-------------------+--------+
| id | nome    | email             | foto   |
+----+---------+-------------------+--------+
|  2 | usuario | usuario@email.com | f.jpg  |
|  2 | usuario | usuario@email.com | f1.jpg |
|  2 | usuario | usuario@email.com | f2.jpg |
+----+---------+-------------------+--------+
3 rows in set (0.00 sec)

mysql> select usuario.*, fotos.foto from fotos inner join usuario on fotos.id = usuario.id where usuario.id = 1;
+----+--------+------------------------+-----------+
| id | nome   | email                  | foto      |
+----+--------+------------------------+-----------+
|  1 | Andrey | andreykvital@gmail.com | foto.jpg  |
|  1 | Andrey | andreykvital@gmail.com | foto2.jpg |
|  1 | Andrey | andreykvital@gmail.com | foto3.jpg |
+----+--------+------------------------+-----------+
3 rows in set (0.00 sec)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey, você esta sendo um fofo, mas eu preciso por os dados em variáveis pois vou usa-las em lugares diferentes.

 

tipo quero mostrar os dados do autor da video aula da tabela cw_destaque_va, e mostrar quantos comentarios a mesma teve puxando os dados da tabela cb_comentarios e armazenando numa variável $comentarios, entendeu... e essa lógica que não entendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você postando o seu SQL do banco de dados com alguns registros, da pra ajudar melhor =)

Enfim, você não precisa gravar os dados em outra variável

coloca em um array esses dados, e não crie uma variável pra cada

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse é meu sql, ele seleciona todos os campos da tabela cw_destaque_va e tambem da tabela cb_comentarios.

eu seleciono todos os dados da tabela cb_comentarios apenas para mostrar quantos comentarios tem em cada post,

por isso gostaria de saber como colocar isso numa variável..

 

SELECT
*
FROM
cb_comentarios ,
cw_destaque_va
WHERE
cw_destaque_va.id = 'variavel' AND
cw_destaque_va.`status` = 'liberado'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Annyh, você terá que fazer dois querys diferentes para cada consulta.

 

Por exemplo:

SELECT * FROM `tabela1`

 

E, sucessivamente:

SELECT * FROM `tabela2`

 

E o que o Andrey pediu é a estrutura do seu banco de dados, que com certeza ajudaria bastante para lhe responder.

 

Abraço! ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Annyh, por favor, vá no seu banco de dados e exporte a estrutura dele e poste aqui no fórum entre as tags [­sql][/­sql]. Uma imagem não vai nos ajudar a manipular os seus dados.

 

Mas, para todos os efeitos, você já tentou fazer duas querys diferentes para cada consulta? Faça um query selecionando a tabela X, e outra query selecionando a tabela Y. Sem mistérios.

 

Abraço! ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tempo de Geração: Mai 18, 2011 as 12:47 AM
-- Versão do Servidor: 5.5.8
-- Versão do PHP: 5.3.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Banco de Dados: `sitejr`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `cb_comentarios`
--

CREATE TABLE IF NOT EXISTS `cb_comentarios` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `id_post` int(11) NOT NULL,
 `data` datetime DEFAULT NULL,
 `status` enum('liberado','aguardando') DEFAULT NULL,
 `nome` varchar(50) DEFAULT NULL,
 `email` varchar(50) DEFAULT NULL,
 `site` varchar(60) DEFAULT NULL,
 `comentario` text,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

--
-- Extraindo dados da tabela `cb_comentarios`
--

INSERT INTO `cb_comentarios` (`id`, `id_post`, `data`, `status`, `nome`, `email`, `site`, `comentario`) VALUES
(1, 44, '2011-05-15 17:59:26', 'liberado', 'Antonio', 'tonho@tera.com.br', NULL, 'meu comentario será esta'),
(2, 44, '2011-05-16 18:36:24', 'liberado', 'Annyh', 'anny@tera.com', 'site.com.br', 'asçlfj alsdjflçaskdjflçkasdj lçajflçasjf alsjf lasjflçasjlçsj lçksdj lçjasçlfj lakçsj lk sa lklj'),
(3, 44, '2011-05-15 18:57:20', 'liberado', 'José', 'junior.eberhardt@gmail.com', 'www.contrabarra.com.br', 'meu comentario'),
(4, 44, '2011-05-16 19:05:57', 'liberado', 'Ariclenes Martins', 'ariclenes@martins.com.br', '', 'Meu comentario da vídeo aula hehehheheh rsrsss'),
(5, 44, '2011-05-16 19:07:30', 'liberado', 'Ariclenes Martins', 'ariclenes@martins.com.br', '', 'Meu comentario da vídeo aula hehehheheh rsrsss'),
(6, 14, '2011-05-16 21:02:44', 'liberado', 'asdf', 'fjasd@adfa.com', '', 'asdfasdfasd fasd fasd'),
(7, 14, '2011-05-16 21:03:29', 'liberado', 'asdf', 'fjasd@adfa.com', '', 'asdfasdfasd fasd fasd');

 

 

-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tempo de Geração: Mai 18, 2011 as 12:48 AM
-- Versão do Servidor: 5.5.8
-- Versão do PHP: 5.3.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Banco de Dados: `sitejr`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `cb_comentarios`
--

CREATE TABLE IF NOT EXISTS `cb_comentarios` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `id_post` int(11) NOT NULL,
 `data` datetime DEFAULT NULL,
 `status` enum('liberado','aguardando') DEFAULT NULL,
 `nome` varchar(50) DEFAULT NULL,
 `email` varchar(50) DEFAULT NULL,
 `site` varchar(60) DEFAULT NULL,
 `comentario` text,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

--
-- Extraindo dados da tabela `cb_comentarios`
--

INSERT INTO `cb_comentarios` (`id`, `id_post`, `data`, `status`, `nome`, `email`, `site`, `comentario`) VALUES
(1, 44, '2011-05-15 17:59:26', 'liberado', 'Antonio', 'tonho@tera.com.br', NULL, 'meu comentario será esta'),
(2, 44, '2011-05-16 18:36:24', 'liberado', 'Annyh', 'anny@tera.com', 'site.com.br', 'asçlfj alsdjflçaskdjflçkasdj lçajflçasjf alsjf lasjflçasjlçsj lçksdj lçjasçlfj lakçsj lk sa lklj'),
(3, 44, '2011-05-15 18:57:20', 'liberado', 'José', 'junior.eberhardt@gmail.com', 'www.contrabarra.com.br', 'meu comentario'),
(4, 44, '2011-05-16 19:05:57', 'liberado', 'Ariclenes Martins', 'ariclenes@martins.com.br', '', 'Meu comentario da vídeo aula hehehheheh rsrsss'),
(5, 44, '2011-05-16 19:07:30', 'liberado', 'Ariclenes Martins', 'ariclenes@martins.com.br', '', 'Meu comentario da vídeo aula hehehheheh rsrsss'),
(6, 14, '2011-05-16 21:02:44', 'liberado', 'asdf', 'fjasd@adfa.com', '', 'asdfasdfasd fasd fasd'),
(7, 14, '2011-05-16 21:03:29', 'liberado', 'asdf', 'fjasd@adfa.com', '', 'asdfasdfasd fasd fasd');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Annyh.

Eu desde o começo entendi o que você quer fazer. Também tive dificuldades em um script meu em relação a este assunto, mas a solução é simples, acredite.

 

Como já falei anteriormente, faça uma query selecionando cada db. No caso, use um SELECT para cb_comentarios e outro para a sua outra tabela. Depois, com o PHP, é só buscar as informações pelas variáveis respectivas a cada query.

 

Abraços! ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kaminari, no meu caso não seria possível, pelo menos eu acho, pois preciso saber qual comentário pertence a qual video aula, e eu estou relacionando a tabela cw_destaque_va com a tabela cb_comentarios pelo id_post, entendeu, se for possível fazer de outra forma, por favor me de uma luz, pois minha cabeça já doeu muito por causa disso.

 

tenho um menu normal na página que possui categorias assim:

 

menu: video aulas->css-php-xhtml

 

caso o usuário clique em menu ele lista todas as vídeo aulas pela data mais recente em ordem decrescente,

e é aqui que quero mostrar o número de comentários, que esta na tabela cb_comentarios,

 

caso o usuário clique em alguma categoria (css-php-xhtml), ele mostra as vídeo aulas correspondentes,

aqui também vou mostrar o número de comentários.

 

caso o usuário clicou em uma vídeo aula especifica ele mostra o vídeo com mais informações etc... entendeu...

 

 

 

 

if(isset($_GET['cat'])){
			$cat = $_GET['cat'];

			$sqlVa = "SELECT
						* FROM
						cw_destaque_va
						WHERE
						categoria = '$cat' AND status = 'liberado'
						ORDER BY data DESC";

		} elseif(isset($_GET['va'])){
			$idVa = intval($_GET['va']);
			$sqlVa = "SELECT
						* FROM
						cw_destaque_va							
						WHERE id = $idVa AND status = 'liberado'";
		} else {			
			$sqlVa = "SELECT
						* FROM
						cw_destaque_va
						WHERE status = 'liberado'
						ORDER BY data DESC";
		}

		try {

			$qrVa = $conecta->prepare($sqlVa);				
			$qrVa->execute();
			$resVa = $qrVa->fetchAll(PDO::FETCH_NUM);
			$contaVa = $qrVa->rowCount();

		} catch (PDOException $erroVa){
			echo 'Erro na seleção<br />' . $erroVa->getMessage();
		}

		if($contaVa > 0) {				

			foreach ($resVa as $res){
				$idVa = $res[0];
				$imgVa = $res[2];
				$autorVa = $res[4];
				$siteVa = $res[6];
				$tituloVa = $res[8];
				$textoVa = $res[9];					
				$categoria = $res[10];
				$comentarios = $res[11];										
				$dataVa = strftime('%d %b %Y', strtotime($res[12]));										
				$visitas = $res[15];

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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