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

Dúvida em SQL - consulta a várias tabelas

Discussão em 'Web Development' iniciada por khaluh, 28 de Junho de 2007. (Respostas: 11; Visualizações: 3529)

  1. khaluh

    khaluh Power Member

    Viva

    Durante a optimização de um site, resolvi trocar o seguinte código de SQL
    PHP:
    $maquina =     "
                        SELECT *
                        FROM  maquina
                        ORDER BY ma_id_maq
                    "
                    
    ;
    por este
    PHP:
            $diversos mysql_query(    "
                                    SELECT    ma_id_maq, cf_nome, cb_nome, dvd_nome, cd_nome, cm_nome, cp_nome
                                    FROM    maquina, cod_fontes, cod_boards, cod_cddvd, cod_discos, cod_memorias, cod_processador
                                    WHERE    ma_board    = cb_cod_board
                                    AND        ma_cddvd    = dvd_cod_cddvd
                                    AND        ma_discos     = cd_cod_discos
                                    AND        ma_fonte    = cf_cod_fonte
                                    AND        ma_mem        = cm_cod_memoria
                                    AND     ma_proc        = cp_cod_proc
                                    ORDER BY     ma_id_maq
                                    "
                                    
    );

    Quais as diferenças? No primeiro aparecem apenas os id's dos diversos itens, no segundo pretendo que apareçam os nomes dos materiais (de modo a poder identificar por nome os componentes de cada computador).

    A dúvida (ou o problema em si) é que dá-me um erro na consulta (e estou aqui as voltas à um tempo e ainda não consegui perceber como corrigir a consulta).

    Obs. Os nomes dos campos estão correctos
     
    Última edição: 28 de Junho de 2007
  2. JPCarvalhinho

    JPCarvalhinho Colaborador
    Staff Member

    aspas e parentesis no final?
     
  3. khaluh

    khaluh Power Member

    Viva

    Estava apenas mal copiado para o post
     
  4. SoundSurfer

    SoundSurfer Power Member

    Usa o "INNER JOIN" ...
     
  5. scroll

    scroll Power Member

    ... ou LEFT JOIN, depende do pretendido.

    não esquecer que os campos no query têm de assumir depois: id.tabela_x, nome.tabela_y.


    abraço,
     
  6. khaluh

    khaluh Power Member

    Relativamente ao INNER JOIN, tenho de o usar por ser MySQL com PHP? É que já fiz pesquisas destas sem usar o INNER JOIN e funcionaram normalmente
     
  7. SoundSurfer

    SoundSurfer Power Member

    Se colocasses o erro, seria mais fácil, digo eu.
     
  8. SpEeDyGoNzAlEs

    SpEeDyGoNzAlEs Power Member

    Provavelmente tem alguma coisa a ver com o facto de fazeres select a várias tabelas, e não identificares univocamente, como foi dito acima, a qual tabela pertencem os campos, na expressão where.

    Se tiveres 2 tabelas com 2 campos de nome igual, e se esses campos aparecerem na expressão where, o sql não vai adivinhar...
     
  9. khaluh

    khaluh Power Member

    Eu tenho a seguinte instrução :
    PHP:
    $resultado mysql_query($diversos)  
        or  die (
    "Não foi possível realizar a consulta por motivos técnicos.");
    e ele devolve : Não foi possível realizar a consulta por motivos técnicos.
    Exacto, daí os nomes estranhos nos campos. Cada nome de campo tem incluido a tabela a que pertence, exemplo: ma_id_maq onde é o campo id_maq (identificação da máquina) da tabela maquina (daí o ma antes)

    Em relação ao INNER JOIN ou LEFT JOIN, como que sugerem que faça a consulta?
     
    Última edição: 28 de Junho de 2007
  10. khaluh

    khaluh Power Member

    [RESOLVIDO] Dúvida em SQL - consulta a várias tabelas

    Viva.

    Já resolvi o problema, resolvi ir adicionando campo a campo, de modo a detectar o erro. O que é certo é que acabei por nao detectar nenhum erro e ficou a funcionar.

    PHP:
                                        // Apresentação das maquinas existentes
        
    $maquina =     "
                        SELECT ma_id_maq, cf_nome, dvd_nome, cb_nome, cd_nome, cm_nome, cp_nome, ep_estado
                        FROM  maquina, cod_fontes, cod_cddvd, cod_boards, cod_discos, cod_memorias, cod_processador, estado_produto
                        WHERE ma_fonte = cf_cod_fonte
                        AND ma_cddvd = dvd_cod_cddvd
                        AND ma_board = cb_cod_board
                        AND    ma_discos = cd_cod_discos
                        AND    ma_mem = cm_cod_memoria
                        AND ma_proc    = cp_cod_proc
                        AND ma_estado = ep_estado
                        ORDER BY ma_id_maq
                    "
                    
    ;
     
  11. Karski

    Karski Power Member

    Só um aparte.

    Era muito mais facil teres criado apenas uma tabela para todos os componentes e diferencia-los por um campo dessa tabela. Algo do genero
    cod_componente||Nome||Fonte||CDDVD||BOARD||DISCO||(...)

    Era muito mais facil fazeres actualizações sobre a aplicação e muito mais facil de retirares informação da DB. Além do mais se quiseres acrescentar novos componentes apenas necessitavas de acrescentar uma nova coluna a uma tabela em vez de criares tabelas novas e refazer as querys
     
  12. trovial

    trovial Power Member

    a melhor koisa paara isso e testares primeiro o query em sql , e so depois passar para php

    o inner join é equivalente aos wheres em que estas a ligar as chaves estrangeiras...
    achei alguma piada , quando te pediram a msg de erro , teres dito que te dizia a msg de erro do die() lol...

    ha uma funçao php, que te devolve o erro do mysql é mais facil para prcurar erros.

    mas se kalhar ate podia ser algum erro tecniko do servidor lol
     

Partilhar esta Página