Jump to content

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


Loira

Recommended Posts

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

Link to comment
Share on other sites

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."

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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?

"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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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."

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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";
   }
}
?>

"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

Link to comment
Share on other sites

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."

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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."

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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."

Link to comment
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.