1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

MySQL 2 Tabelas

Discussão em 'Web Development' iniciada por sornafix, 5 de Fevereiro de 2009. (Respostas: 7; Visualizações: 1067)

  1. sornafix

    sornafix Power Member

    Boa tarde,
    eu tenho duas tabelas, que não possuem nehuma relação uma com a outra, como podem ver no sql abaixo:
    CREATE TABLE `forum_global` (
    `id_forum_global` int(11) NOT NULL auto_increment,
    `titulo` varchar(250) NOT NULL,
    `comentario` longtext NOT NULL,
    `nome` varchar(250) NOT NULL,
    `data` varchar(250) NOT NULL,
    `mail` varchar(250) NOT NULL,
    PRIMARY KEY (`id_forum_global`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

    CREATE TABLE `topico_inicial` (
    `id_topico_ini` int(11) NOT NULL auto_increment,
    `titulo` varchar(250) NOT NULL,
    `titulo_ficheiro` varchar(250) NOT NULL,
    `caminho` varchar(250) NOT NULL,
    `comentario` longtext NOT NULL,
    `data` varchar(250) NOT NULL,
    `seccao` varchar(250) NOT NULL,
    `nome` varchar(250) NOT NULL,
    `id_ano` int(11) NOT NULL,
    `numero_visitas` int(11) NOT NULL default '0',
    PRIMARY KEY (`id_topico_ini`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;

    O meu objectivo era que em uma só query conseguisse ter os resultados destas duas tabelas, ou seja, tinha um where em que comparava por exemplo o campo data com a data de hoje e a query retornava os resultados de das duas tabelas.
    Exemplo: a primeira tabela: 11 resultados, segunda tabela 8 o resultado seria uma tabela com 19 linhas.

    É possivel fazer isto?
     
  2. geoblast

    geoblast Power Member

    Experimenta:

    PHP:
    SELECT forum_global.*, topico_inicial.* FROM forum_globaltopico_inicial WHERE forum_global.data xxx OR topico_inicial.data xxx
     
  3. theforbidden1

    theforbidden1 Banido

    não percebi lá muito bem porque é que a data é guardada em varchar...
     
  4. oscarolim

    oscarolim Power Member

    E com 250 caracteres...
     
  5. sornafix

    sornafix Power Member

    geoblast a tua solução não funciona pois dessa maneira ele faz as combinações das duas tabelas e da mais resultados do que deveria.
    Quanto aos às outras 2 "ajudas": eu escolhi vchar pois ainda não tinha a certeza se guardaria em formato dd/mm/aaaa ou guardaria por extenso tipo "dia do mês tal do ano esse mesmo" podendo ate guardar o dia (Segunda, terça ,etc) e por esta razão também pus os 250 caracteres.
     
  6. FabricioSilva

    FabricioSilva Power Member

    Mesmo assim nao justifica tanto caracter , 100 caracteres dá e ainda sobra.
    E sinceramente nao sei se cnsegues comparar ambas, sem uma ligaçao entre elas, nao tenho a certeza.
    Mas visto que sou um pouco amador ainda nestas andanças, nao des muita credabilidade a miinha opiniao , :b
     
  7. hostmake

    hostmake Power Member

    Quando fazes múltiplos selects e as tabelas não estão interligadas, vai dar m*rda.

    O que podes fazer presumindo que o campo de data funciona da mesma maneira das duas, é pegando no Select que já te deram... e ligares 1 data a outra, e a 2º data a um valor (não sendo opcional, mas sim obrigatório (AND))

    Código:
     SELECT forum_global.*, topico_inicial.* FROM forum_global, topico_inicial WHERE forum_global.data = topico_inicial.data AND topico_inicial.data = xxx
    1º Problema, tu deves ter nome nas 2 tabelas com os mesmos campos, presumo e ao usares tabela.* e depois outra_tabela.*, ele vai substituir os valores, o melhor é se tiveres campos iguais tipo.

    tabela_1.id AS t1id, tabela_2.id as t2id (que depois serão as variáveis que contem os teus valores)

    E ouve o pessoal em relação a optimização da tua BD.
     
    Última edição: 6 de Fevereiro de 2009
  8. geoblast

    geoblast Power Member

    Ok, entendi. Nesse caso usas o UNION ou o UNION ALL. A diferença entre ambos é que o UNION não retorna registos repetidos e o UNION ALL retorna mesmo todos os registos

    PHP:
    SELECT forum_global.* FROM forum_global WHERE forum_global.data xxx
    UNION 
    (ou UNION ALL)
    SELECT topico_inicial.* FROM topico_inicial WHERE topico_inicial.data xxx
    Verifa lá se é isto!
     

Partilhar esta Página