Jump to content
Sign in to follow this  
Sir Pereira

Ler dados de Join SQL

Recommended Posts

Sir Pereira

Boas,

estou a fazer um sistema, no qual preciso que ao listar os utilizadores, ele vá buscar um valor de outra tabela.

A tabela dos utilizadores é scie_users e a das categorias (dos cargos) é a scie_users_cats.

A scie_users tem os campos id, nome e cargo (que ao adicionar provém de uma listagem dos campos nome e valor da scie_users_cats).

A scie_users_cats é composta por nome (nome do cargo) e valor (campo igual ao nome, mas sem acentos e tudo o resto, para eu colocar no value do form ao adicionar).

Como tal, precisava de fazer um Join para ele ir buscar o nome do cargo, procurando pelo valor atribuído ao mesmo na base de dados.

Tenho este código agora:

<?php

		// FAZ O SQL PARA LISTAR OS DADOS PARA PREENCHER OS TEXTBOXES COM OS DADOS
		// JÁ EXISTENTES.
			$sql = mysql_query("SELECT * FROM scie_users,scie_users_cats WHERE scie_users_cats.valor = scie_users.cargo");

			if ($sql) {
				while ($dados = mysql_fetch_assoc($sql)) {
		?>

					<div id="box_user">
						<ul>
							<li>
							<a href="<?php echo HTTP_DIR; ?>/users/modifica.php?id=<?php echo $dados['id']; ?>">
								<span class="one"><?php echo $dados['nome']; ?></span>
								<span class="two"><?php echo $dados['id']; ?></span>

								<!-- OBJECTIVO LISTAR DA TABELA SCIE_USERS_CATS ONDE O VALOR
									FOR IGUAL A VALOR DO CARGO -->
								<span class="three"><?php echo $dados['scie_users_cats.nome']; ?></span>
							</a>
							</li>
						</ul>
					</div>

		<?php	
				}
			} else {
				echo mysql_error();
			}
		?>

Isto fui eu a inventar um pouco, pois não estou a ver como fazer. Testei o SQL no phpmyadmin, e funcionou, mas não sei como ir buscar os resultados no PHP.

Sugestões?  😳

Share this post


Link to post
Share on other sites
taviroquai

$sql = mysql_query("SELECT * FROM scie_users,scie_users_cats WHERE scie_users_cats.valor = scie_users.cargo");

O campo scie_users.cargo está relacionado com scie_users_cats.nome ou com scie_users_cats.valor ?

Devias ter uma chave primária "id" (tal como tens na tabela scie_users), na tabela scie_users_cat, e depois relacionavas scie_users.cargo com scie_users_cats.id

Depois, usando o JOIN:

$sql = mysql_query("SELECT scie_users.*, scie_users_cats.nome as cargo_nome FROM scie_users LEFT JOIN scie_users_cats ON scie_users_cats.id = scie_users.cargo");

Mas atenção que agora os resultados são diferentes do que tinhas.

Share this post


Link to post
Share on other sites
Sir Pereira

Esses LEFT JOINs e isso é que me atrofiam todo. Já andei a ler sobre isso mas ainda não consegui perceber bem.

Porquê utilizar o ID em vez do nome do cargo?

O campo scie_users.cargo está relacionado com scie_users_cats.valor, pois a partir do momento em que consiga coincidir esta informação vou buscar o nome com toda a formatação scie_users_cats.nome.

Share this post


Link to post
Share on other sites
pedrotuga

Àcerca de left joins:

http://www.w3schools.com/sql/sql_join_left.asp

É muito simples, não tem nada que enganar.

Sobre IDs.. 'id' tipicamente é um nome tipicamente dado a colunas que são chaves de tabelas. Estas colunas servem precisamente para fazer relacionamentos e costumam  ter características que as tornam particularmente orientadas a isso:

-são numéricas para acelerar operações de pesquisa, ordenação, etc.

-são únicas para evitar ambiguidades

Share this post


Link to post
Share on other sites
pedrotuga

Ok, o teu problema é o sql então. O w3schools tem um bom tutorial:

http://www.w3schools.com/Sql/

Só para atalhar um pouco...

Se o relacionamento for obrigatório podes fazer uma coisa deste tipo:

select u.nome, c. cargo from  scie_users_cats c, scie_users u where u.id_cargo = c.id 

SELECT u.nome, c.cargo
FROM scie_users u
LEFT JOIN scie_users_cat c
ON u.id_cargo = c.id

Mas lê o manual!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.