Jump to content
rexmage

SELECT e INNER JOIN

Recommended Posts

rexmage

Ola pessoal,

estou aqui com uma duvida que me parece que os mais experientes são capazes de me explicar (ou talvez até seja básica).

Bom na realidade estou a tentar fazer um select de uma base de dados em que tenho:

Tabela do Produto

- campo.produto_id

- campo.produto_nome

Tabela com Orders

- campo.order_id

- campo.activo ='C'

Tabela com User

- campo.user_nome

- campo.user_email

- campo.user_id

Existem mais campos, mas na realidade penso que estes é que são necessários. Ok, então a minha dúvida surge quando estou a tentar chamar os campos de forma correcta e dá-me uma enorme lista, quando só existem apenas 8 ou 9 com akele ID

o meu codigo é:


$query = sprintf("SELECT t3.name, t3.email, t1.product_quantity, t2.order_number
			      FROM jos_vm_order_item as t1,jos_users as t3
				  INNER JOIN jos_vm_orders as t2
				  WHERE t1.product_id='$cat' AND t2.order_status='C'
				  ");

A estrutura que vos dei em cima é um pouco abstrata relativamente ao real, no entanto penso que é possível compreender o que quero dizer e fazer, ou não... :nono1:

Alguém consegue dar uma ajuda ? Preciso de uma luz...

Obrigado  ;)


<?PHP echo "Bo0m"; ?>

Share this post


Link to post
Share on other sites
brunoais

1º:porquê o sprintf()?

2º: Parece-me que o que tu queres é:

SELECT t3.name, t3.email, t1.product_quantity, t2.order_number
			      FROM jos_vm_order_item as t1
				  INNER JOIN jos_users as t3 ON -- Please insert condition to join these tables
				  INNER JOIN jos_vm_orders as t2 ON  t2.order_status = 'C' AND --Please insert condition to join these tables
				  WHERE t1.product_id = '$cat'

Confirma sff (de notar que o que escrevi está incompleto mas mais completo e/ou explícito do que o que usaste).


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
rexmage

Boas,

$query = (" SELECT t3.name, t3.email, t1.product_quantity, t2.order_number

    FROM jos_vm_order_item AS t1

INNER JOIN jos_users AS t3 ON jos_users.id = jos_vm_orders.user_id

INNER JOIN jos_vm_orders AS t2 ON  t2.order_status = 'C' AND

WHERE t1.product_id = '$cat' ");

fiz assim.. mas continua a dar problemas na apresentação da lista.

O inner join que tou a tentar fazer (ou dizer) é que o campo user.id que vem da tabela users tem de ser igual ao campo orders.id, onde o produto.id seja igual ao $cat que vem em cima $cat = $_POST['cat']; (esta funciona que eu testei).

De acordo com aquilo que explicaste, acho que era suposto isto mostrar info, no entanto continua a dar isto:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/lisboadi/public_html/teste/listar.php on line 63

Sem mensagens!

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/lisboadi/public_html/teste/listar.php on line 84


<?PHP echo "Bo0m"; ?>

Share this post


Link to post
Share on other sites
brunoais

Falta-te uma condição aqui:

INNER JOIN jos_vm_orders AS t2 ON  t2.order_status = 'C' AND

depois do AND


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
rexmage

Pessoal, já funciona correctamente.

Ainda estive a inventar e tentei fazer assim:


$query = (" SELECT  

				t1.order_id , t1.product_id, t1.product_quantity , 
				t2.id , t2.name, t2.email, 
				t3.order_id , t3.order_number , t3.user_id,
				t4.product_id

				FROM jos_vm_order_item as t1 , jos_users as t2 , jos_vm_orders as t3 , jos_vm_product as t4

				INNER JOIN t3 ON t3.order_id = t1.order_id
				INNER JOIN t4 ON t4.product_id = t1.product_id
				INNER JOIN t2 ON t2.user_id = t3.user_id

				WHERE t1.product_id = '$cat' AND t1.order_status = 'C' "); 

E depois fiz assim :

$query = (" SELECT  * FROM jos_vm_order_item

			INNER JOIN jos_vm_orders ON jos_vm_order_item.order_id = jos_vm_orders.order_id
			INNER JOIN jos_vm_product ON jos_vm_product.product_id = jos_vm_order_item.product_id


			WHERE jos_vm_order_item.product_id = '$cat' AND jos_vm_order_item.order_status = 'C' "); 

Agora quero relacionar a tabela jos_vm_orders.user_id com jos_users.user_id, como faço isto ?

É que encontra-se dentro do INNER JOIN :S... alguém pode ajudar ?

Tnks


<?PHP echo "Bo0m"; ?>

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Muito sinceramente nunca me dei muito bem com os INNER's, também por nunca ter sido uma grande necessidade para mim, mas pelos vistos parece que também não são os teus melhores amigos... Supondo que estás a usar MySQL, porque não fazes relacionamentos nas tabelas!? Penso que seria mais fácil, mas é só uma opinião ;)

Share this post


Link to post
Share on other sites
rexmage

Boas Lfscoutinho,

Sim isto, não anda muito bem, eu e os INNER JOINS não temos uma relação facil! LOL.

Estou a usar o INNER JOIN porque quero verificar que os campos existem mesmo de um lado  e de outro.

Sinceramente estou agora a tentar aprofundar mais as minhas consultas SQL e precisava compreender também o que estou a falhar.

Como é que tu relacionavas 3 tabelas diferentes sem INNER JOIN ? Eu fiz isso o meu problema é que tavam a dar-me listas enormes e não tava a perceber bem porquê.

Pensei em usar o GROUP BY e depois so me apresentava um resultado... LOL


<?PHP echo "Bo0m"; ?>

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Experimenta fazer download do MySQL Workbench (http://wb.mysql.com/) que é um programa de desenho de bases de dados. Nele, crias as tabelas, depois crias um diagrama e metes lá as tabelas...e depois tens lá no menu da esquerda os botões para fazeres os relacionamentos... Depois, nas consultas basta fazeres algo como "WHERE t1.id = t2.id AND t3.id = t4.id" etc... ;)

Share this post


Link to post
Share on other sites
rexmage

Boas, já resolvi o meu problema pessoal ;)

	$query = (" 
			SELECT * 
			FROM jos_vm_orders 
			INNER JOIN jos_vm_order_item ON jos_vm_order_item.order_id = jos_vm_orders.order_id
			INNER JOIN jos_users ON jos_users.id  = jos_vm_orders.user_id 
			WHERE (jos_vm_order_item.product_id = '$cat') AND (jos_vm_order_item.order_status = 'C')

		  "); 

E a solução estava na combinação correcta das tabelas. Em vez de usar o jos_vm_order_item, usei o orders apenas e assim consigo  chamar as relações das diferentes tabelas.

Estava um bocado a dormir ontem, lol, obrigado na mesma e fica ai a minha solução.

Cumpz e obrigado aos que deram o seu contributo.


<?PHP echo "Bo0m"; ?>

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

×
×
  • 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.