Jump to content
Loira

[Resolvido] Como fazer select de várias tabelas ao mesmo tempo

Recommended Posts

Loira

olaa...

gente preciso de ajuda...

e assim tenho varias tabelas

hardware

software

inserir

componentes

e depois tenho no layout do c# uma DataGridView

a minha duvida é

como e que eu vejo os dados DE TODAS?

uma a uma é

SELECT * FROM `inserir`
SELECT * FROM `hardware`
SELECT * FROM `software`
SELECT * FROM `componentes`

mas como as junto numa so? :s Nunca fui boa para perceber como funciona os JOINS [supondo eu que seja isso a fazer ]

Agradeço desde ja**

beijinho <3

Edited by brunoais
titulo MUITO melhorado (era: select...)

"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
pikax

as tabelas tem o mesmo numero de colunas?


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
legd1991

Se preferires não usar JOINS podes fazer assim:

SELECT * FROM inserir, hardware, software, componentes

Cumprimentos

  • Vote 1

Share this post


Link to post
Share on other sites
Loira

componentes - 7colunas (1 PK AI)

hardware - 7colunas (1 PK AI)

software - 5colunas (1PK AI)

inserir - 6colunas (1PK AI)

passando isso agora pa php ficara assim?

mysql_query("SELECT * FROM `inserir`, `hardware`, `software`, `componentes`");


"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
legd1991

passando isso agora pa php ficara assim?

mysql_query("SELECT * FROM `inserir`, `hardware`, `software`, `componentes`");

Presumo que sim. PHP não é o meu forte, mas penso que se tirares os ` também funciona.

Dessa forma tens os dados de todas as tabelas numa só

Edited by legd1991

Share this post


Link to post
Share on other sites
Loira

humm... e por exemplo, no codigo do login isto esta assim


<?php
// OUTPUT PROGRAM VERSION
if (isset($_GET["ver"])) {
//
}
// REMOTE AUTHENTICATION
elseif (isset($_GET["auth"])) {
require('mysql.php');
$user = mysql_real_escape_string($_GET['user']);
$pass = mysql_real_escape_string($_GET['pass']);

$result = mysql_query("SELECT * from `users` where `username` = '".$user."' && `password` = '".$pass."'");

if (mysql_num_rows($result)) {
mysql_query("UPDATE `users` SET `online`='1' where `username` = '".$user."' && `password` = '".$pass."'");
echo "ok";
}
else{
echo "error";
}
}
?>

para este select irei ter que declarar TODAS as variaveis de TODAS as tabelas?

Edited by Rui Carlos
Formatação do código.

"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
legd1991

Não precisas de fazer select * , podes fazer um select apenas aos campos que precisas, por exemplo Id, Nome, etc

  • Vote 1

Share this post


Link to post
Share on other sites
Loira

mas eu preciso de todos os campos xD

a minha questao e se os tenh que declarar em cima tambem ou nao sera necessario


"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
legd1991

mas eu preciso de todos os campos xD

a minha questao e se os tenh que declarar em cima tambem ou nao sera necessario

Como já disse o meu forte não é o PHP :) , mas faz sentido que tenhas para depois os poderes usar onde quiseres

Share this post


Link to post
Share on other sites
pikax

O problema de se usar o SELECT * from tbl1,tbl2,tbl3 e' que ira' multiplicar o numero de colunas!

Se as tabelas tiverem algumas colunas parecidas, um UNION acho que era uma boa opcao.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Loira

tambem nao e propriamente o meu forte ahah apenas estou a usar pk e mais seguro pa encriptar as PW, evitando os sniffers.. enquanto se com o c# usar a .bll, pode ser facilmente visto as sessoes de login que aquilo e treta e nao encripta nada ahah

vou ver entao isso e depois digovos se funciona

Obrigado*

epah, eu nao tou e bem a fazer o desenho de tabelas.. pk acredito que a PK de algumas tabelas poderam ser juntas noutras...

ou criar uma tabela secundaria com PK de todas as tabelas e depois fazer o select* so dessa tabela...

tou a pensar mal? :x


"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
legd1991

tambem nao e propriamente o meu forte ahah apenas estou a usar pk e mais seguro pa encriptar as PW, evitando os sniffers.. enquanto se com o c# usar a .bll, pode ser facilmente visto as sessoes de login que aquilo e treta e nao encripta nada ahah

vou ver entao isso e depois digovos se funciona

Obrigado*

Em .NET também consegues isso, podes gravar uma sessão encriptada

O problema de se usar o SELECT * from tbl1,tbl2,tbl3 e' que ira' multiplicar o numero de colunas!

Se as tabelas tiverem algumas colunas parecidas, um UNION acho que era uma boa opcao.

Sim, Por isso é que era melhor usar joins

Share this post


Link to post
Share on other sites
Loira

tou a usar .NET .. vou mostrar

*off topic agora xD*

no c#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

static string REMOTE_SERVER_IP = "64.251.15.192/marta";

string login, local_md5_pass,result;

private void button1_Click(object sender, EventArgs e)
{
try
{
login = textBox1.Text;
System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bs = System.Text.Encoding.UTF8.GetBytes(textBox2.Text.ToString());
bs = x.ComputeHash(bs);
System.Text.StringBuilder s = new System.Text.StringBuilder();
foreach (byte b in bs)
{
s.Append(b.ToString("x2").ToLower());
}
local_md5_pass = s.ToString();
using (WebClient client = new WebClient())
{
result = client.DownloadString("http://" + REMOTE_SERVER_IP + "/api.php?auth&user=" + login + "&pass=" + local_md5_pass);
}
if (result != "error")
{
menus menuform = new menus();
menuform.Show();
this.Visible = false;
}
else
{
MessageBox.Show("Login Failed!");

}

}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}

private void btnRecover_Click(object sender, EventArgs e)
{
recover recoverform = new recover();
recoverform.Show();
}
}
}

no ficheiro php:

<?php
// OUTPUT PROGRAM VERSION
if (isset($_GET["ver"])) {
//
}
// REMOTE AUTHENTICATION
elseif (isset($_GET["auth"])) {
   require('mysql.php');
   $user = mysql_real_escape_string($_GET['user']);
   $pass = mysql_real_escape_string($_GET['pass']);

   $result = mysql_query("SELECT * from `users` where `username` = '".$user."' && `password` = '".$pass."'");

   if (mysql_num_rows($result)) {
       mysql_query("UPDATE `users` SET `online`='1' where `username` = '".$user."' && `password` = '".$pass."'");
   echo "ok";
   }
   else{
   echo "error";
   }
}
?>

Edited by Rui Carlos

"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
pikax
Sim, Por isso é que era melhor usar joins

Irao tambem aumentar o numero de colunas, e se forem mal ligados irao multiplicar tambem as linhas.

Nos joins e' necessario fazer uma ligacao com algum campo. No caso dos FULL UNION so' e' necessario terem o mesmo numero de colunas.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Loira

e quanto a isto

epah, eu nao tou e bem a fazer o desenho de tabelas.. pk acredito que a PK de algumas tabelas poderam ser juntas noutras...

ou criar uma tabela secundaria com PK de todas as tabelas e depois fazer o select* so dessa tabela...

tou a pensar mal? :x

? xD


"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
legd1991

Irao tambem aumentar o numero de colunas, e se forem mal ligados irao multiplicar tambem as linhas.

Nos joins e' necessario fazer uma ligacao com algum campo. No caso dos FULL UNION so' e' necessario terem o mesmo numero de colunas.

Penso que a ideia era trazer todos os dados numa só query. Se usar o UNION consegues trazer tudo mas não vais saber de que tabela é cada campo, vai ficar tudo misturado

  • Vote 1

Share this post


Link to post
Share on other sites
pikax

podes postar o desenho que tens das tabelas que queres juntar?

EDIT:

Penso que a ideia era trazer todos os dados numa só query. Se usar o UNION consegues trazer tudo mas não vais saber de que tabela é cada campo, vai ficar tudo misturado

Se criares um campo estatico com o tipo de cada tabela, nao tens esse problema.

SELECT 'cli' as tipo,* FROM Clientes
FULL UNION
 SELECT 'col',* FROM Colaboradores

Edited by pikax

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
legd1991

e quanto a isto

epah, eu nao tou e bem a fazer o desenho de tabelas.. pk acredito que a PK de algumas tabelas poderam ser juntas noutras...

ou criar uma tabela secundaria com PK de todas as tabelas e depois fazer o select* so dessa tabela...

tou a pensar mal? :x

? xD

Podes e deves ter foreign key num modelo relacinal de base de dados

podes postar o desenho que tens das tabelas que queres juntar?

EDIT:

Se criares um campo estatico com o tipo de cada tabela, nao tens esse problema.

SELECT 'cli' as tipo,* FROM Clientes
FULL UNION
 SELECT 'col',* FROM Colaboradores

Sim consegues dar sempre a volta a isso, com mais ou menos trabalho. O ideal é uma query com Joins bem construída

Share this post


Link to post
Share on other sites
Loira

entao crio tipo uam tabela

todas - id_hardware, id_soft, id_comp, id_inserir

com os PK das tabelas

e depois e so fazer o select na tabela 'todas'?


"Hello guys. You don't know me, but I know you. I want to play a game. Here's what happens if you lose"

"Só erra quem produz... Mas só produz quem não tem medo de errar"

irc @Login

NickServ Acesso a Number1 autorizado

Share this post


Link to post
Share on other sites
pikax
O ideal é uma query com Joins bem construída

Sim, e' o ideial, mas o ideal e' nao misturar "alhos com bugalhos". Se logicamente nao consegues interligar as tabelas, e' dificil fazer uma query dita "bonita"


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

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.