Usando a conexão Mysql
Nos capítulos anteriores, nós aprendemos que, se ler os dados em uma tabela, que é relativamente simples, mas muitas vezes precisa ler dados de várias tabelas em uma aplicação real.
Este capítulo vamos mostrar-lhe como usar o MySQL Cadastre dados de consulta em duas ou mais tabelas.
Você pode usar o MySQL no SELECT, UPDATE e DELETE JOIN consultas multi-tabelas comuns.
Cadastre-se de acordo com a função dividida em três categorias a seguir:
- (Ligação interna, ou a conexão equivalente) INNER JOIN: obter o registro dois campos na tabela corresponde relações.
- LEFT JOIN (conexão à esquerda): Comece todos os registros da tabela esquerda, tabela à direita, mesmo se não houver nenhum registro correspondente correspondentes.
- RIGHT JOIN (conexão à direita): Em contraste com o LEFT JOIN, obter a tabela da direita para todos os registros, mesmo se a tabela esquerda não tem registos correspondentes correspondentes.
estrutura de banco de dados e dos dados utilizados nesta seção Download: w3big.sql .
Use INNER JOIN prompt de comando
Temos duas tabelas tcount_tbl e w3big_tbl na base de dados w3big. Dois dados de tabelas de dados são os seguintes:
Exemplos
Tente os seguintes exemplos:
root@host# mysql -u root -p password; Enter password:******* mysql> use w3big; Database changed mysql> SELECT * FROM tcount_tbl; +-----------------+----------------+ | w3big_author | w3big_count | +-----------------+----------------+ | mahran | 20 | | mahnaz | NULL | | Jen | NULL | | Gill | 20 | | John Poul | 1 | | Sanjay | 1 | +-----------------+----------------+ 6 rows in set (0.01 sec) mysql> SELECT * from w3big_tbl; +-------------+----------------+-----------------+-----------------+ | w3big_id | w3big_title | w3big_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 1 | Learn PHP | John Poul | 2007-05-24 | | 2 | Learn MySQL | Abdul S | 2007-05-24 | | 3 | JAVA Tutorial | Sanjay | 2007-05-06 | +-------------+----------------+-----------------+-----------------+ 3 rows in set (0.00 sec) mysql>
Em seguida, vêm para conectar mais de duas tabelas na tabela para ler w3big_tbl todos os valores de campo w3big_count campo w3big_author correspondentes à tabela no tcount_tbl usando MySQL INNER JOIN (uso pode ser omitido INNER JOIN, o mesmo efeito):
mysql> SELECT a.w3big_id, a.w3big_author, b.w3big_count FROM w3big_tbl a INNER JOIN tcount_tbl b ON a.w3big_author = b.w3big_author; +-----------+---------------+--------------+ | w3big_id | w3big_author | w3big_count | +-----------+---------------+--------------+ | 1 | John Poul | 1 | | 3 | Sanjay | 1 | +-----------+---------------+--------------+ 2 rows in set (0.00 sec)
Acima de instrução SQL é equivalente a:
mysql> SELECT a.w3big_id, a.w3big_author, b.w3big_count FROM w3big_tbl a, tcount_tbl b WHERE a.w3big_author = b.w3big_author; +-------------+-----------------+----------------+ | w3big_id | w3big_author | w3big_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 2 rows in set (0.01 sec) mysql>
MySQL LEFT JOIN
MySQL LEFT JOIN e junte-se diferente. MySQL LEFT JOIN vai ler todos os dados da tabela de dados do lado esquerdo, o lado direito da tabela, mesmo se não há dados correspondentes.
Exemplos
Experimente os exemplos a seguir, w3big_tbl tabela à esquerda, tcount_tbl a tabela à direita, para entender MySQL LEFT JOIN aplicações:
root@host# mysql -u root -p password; Enter password:******* mysql> use w3big; Database changed mysql> SELECT a.w3big_id, a.w3big_author, b.w3big_count FROM w3big_tbl a LEFT JOIN tcount_tbl b ON a.w3big_author = b.w3big_author; +-------------+-----------------+----------------+ | w3big_id | w3big_author | w3big_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 2 | Abdul S | NULL | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 3 rows in set (0.02 sec)
Os exemplos acima usam o LEFT JOIN, a instrução lê todo o campo de dados selecionado para a esquerda do w3big_tbl tabela de dados, mesmo se não houver uma correspondente tabela tcount_tbl direita no valor do campo w3big_author.
MySQL RIGHT JOIN
MySQL RIGHT JOIN lê todos os dados à direita da tabela de dados no lado esquerdo da tabela mesmo se não há dados correspondentes.
Exemplos
Experimente os exemplos a seguir, tcount_tbl tabela à esquerda, w3big_tbl a tabela à direita, para entender MySQL RIGHT JOIN aplicações:
root@host# mysql -u root -p password; Enter password:******* mysql> use w3big; Database changed mysql> SELECT b.w3big_id, b.w3big_author, a.w3big_count FROM tcount_tbl a RIGHT JOIN w3big_tbl b ON a.w3big_author = b.w3big_author; +-------------+-----------------+----------------+ | w3big_id | w3big_author | w3big_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 2 | Abdul S | NULL | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 3 rows in set (0.02 sec)
Os exemplos acima usam uma RIGHT JOIN, a instrução lê todo o campo de dados selecionado para o direito do w3big_tbl tabela de dados, mesmo se não houver nenhuma tabela correspondente no tcount_tbl esquerda no valor do campo w3big_author.
Cadastre uso em scripts PHP
uso PHP mysql_query () para executar instruções SQL, você pode usar mais do que a mesma instrução SQL como mysql_query (parâmetros de função).
Tente os seguintes exemplos:
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT a.w3big_id, a.w3big_author, b.w3big_count FROM w3big_tbl a INNER JOIN tcount_tbl b ON a.w3big_author = b.w3big_author'; mysql_select_db('w3big'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Author:{$row['w3big_author']} <br> ". "Count: {$row['w3big_count']} <br> ". "Tutorial ID: {$row['w3big_id']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>