Página 2 de 2 PrimeiroPrimeiro 12
+ Responder ao Tópico



  1. CVR...
    Imagino que o Marcos seja eu (Márcio)... mas vamos em frente... :cry:
    Se você faz a consulta com as 3 tabelas não retorna, pode ser duas coisas :
    1. Uma das tabelas não tem valores que satisfaçam a condição da cláusula WHERE.
    2. Uma das colunas que compõe a cláusula WHERE não é campo chave, isto é, não faz o relacionamento entre as tabelas...

    WPS...
    O que você explicou está 100% correto, trata-se das Foreing Keys, que aparecem como os "tracinhos" no access (lembrando que access não é banco de dados, no máxim um bando de dados... risos...

  2. Nao quero tomar seu tempo. Mas ja que vc esta disponivel, vai ai o que realmente estou fazendo.Vai as tabelas que estou trabalhando, tudo muito simples.

    mysql> show tables;
    +-----------------------+
    | Tables_in_Faturamento |
    +-----------------------+
    | Fatura |
    | Proc |
    | paciente |
    | tmp |
    +-----------------------+
    4 rows in set (0.01 sec)

    mysql> desc Fatura;
    +----------+----------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +----------+----------+------+-----+---------+----------------+
    | Id | int(16) | | PRI | NULL | auto_increment |
    | Cod_proc | char(16) | YES | | NULL | |
    | Cod_pac | int(16) | YES | | NULL | |
    | Origem | char(60) | YES | | NULL | |
    | Dt_trans | date | YES | | NULL | |
    | Dt_int | date | YES | | NULL | |
    | Cm | char(3) | YES | | NULL | |
    | Cp | char(3) | YES | | NULL | |
    | Cc | char(3) | YES | | NULL | |
    | C_obs | char(3) | YES | | NULL | |
    +----------+----------+------+-----+---------+----------------+
    10 rows in set (0.00 sec)

    mysql> Desc Proc;
    +-----------+--------------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +-----------+--------------+------+-----+---------+----------------+
    | Id | int(16) | | PRI | NULL | auto_increment |
    | Codigo | char(16) | YES | | NULL | |
    | Descricao | char(60) | YES | | NULL | |
    | Data | date | YES | | NULL | |
    | Valor | double(16,2) | YES | | NULL | |
    +-----------+--------------+------+-----+---------+----------------+
    5 rows in set (0.00 sec)

    mysql> Select Cod_pac,Cod_proc from Fatura;
    +---------+----------+
    | Cod_pac | Cod_proc |
    +---------+----------+
    | 125 | 21245 |
    | 325 | 21245 |
    | 456 | 21245 |
    | 430 | 236 |
    | 431 | 325 |
    | 123 | 325 |
    | 95 | 321 |
    | 473 | 321 |
    | 474 | 321 |
    | 475 | 321 |
    | 4 | 124411 |
    | 25 | 12124454 |
    | 4 | 124411 |
    | 25 | 12124454 |
    | 25 | 12124454 |
    | 261 | 112141 |
    | 221 | 112141 |
    | 3 | 36654 |
    +---------+----------+
    18 rows in set (0.02 sec)

    mysql> select * from Proc;
    +----+--------+-------------+------------+--------+
    | Id | Codigo | Descricao | Data | Valor |
    +----+--------+-------------+------------+--------+
    | 15 | 001254 | CIRURGIA | NULL | 125.00 |
    | 16 | 325100 | PARTO | 0000-00-00 | 252.00 |
    | 17 | 4580 | PARTO | 0000-00-00 | 22.00 |
    | 18 | 3251 | PARTO COMUM | 0000-00-00 | 253.00 |
    | 19 | 45852 | INTERNAÇÃO | 2005-10-27 | 458.00 |
    +----+--------+-------------+------------+--------+
    5 rows in set (0.00 sec)

    mysql> select Cod_pac, Nome from paciente;
    +---------+----------------------------------------+
    | Cod_pac | Nome |
    +---------+----------------------------------------+
    | 125 | LIDIANE DE SOUZA FERREIRA |
    | 325 | JAIME MANOEL CARVALHO |
    | 456 | VANDILMA ALVES CARDOSO |
    | 457 | SANDRA NERES VIEIRA |
    | 458 | GERALDA OLIVEIRA ALVES |
    | 459 | JUSSARA DIANE C. FERREIRA |
    | 460 | PAULO ADILSON OLIVEIRA |
    | 461 | REGIANE APARECIDA SOUZA FERREIRA |
    | 462 | JONATHAN FRANCISCO DA CRUZ |
    | 463 | ALCIMAR APARECIDA RIBEIRO |
    | 464 | CLAUDIANA PEREIRA DE SOUZA |
    | 465 | ADAO ADELINO AZEVEDO |
    | 466 | MARIA HELENA TEIXEIRA |
    | 467 | GERALDA CAMARGO SANTOS |
    | 468 | MICHAEL RIBEIRO ANDRADE |
    | 469 | MARCO ANTONIO JUNIO LOPES |
    | 470 | IVONE APARECIDA DE SOUZA |
    | 471 | JOSE CARDOSO DAS NEVES |
    | 472 | ELISANGELA DARLING DE OLIVEIRA |
    | 473 | ELISMAR FERREIRA FONSECA |
    | 474 | JENNIFER MARIA PEREIRA FONSECA |
    | 475 | MARIA NEUZELY CARDOSO |
    +---------+----------------------------------------+
    473 rows in set (0.00 sec)

    mysql>
    Elimine alguns pacientes para nao ficar muito grande.

    Agora veja a minha consulta que funciona, mas com a sua nao retorna registros:

    if($opcao == 'TODAS') {


    $sqlval = "Select fa.*,
    pa.*
    from Fatura fa, paciente pa
    where fa.Cod_pac = pa.Cod_pac

    AND
    fa.Dt_int between '$dtini' and '$dtfim' order by Nome";
    }


    CNPJ:18.803.072/0002-13
    PACIENTE ORIGEM DATA PROC.DIAG CM CP CC CO VALOR
    AILTON TADEU DE OLIVEIRA BOCAIUVA 25/10/2005 112141
    ANA VIEIRA DURAES GUARACIAMA 22/10/2005 325
    CIDALIA LEITE DE OLIVEIRA BOCAIUVA 22/10/2005 112141
    ELISMAR FERREIRA FONSECA GUARACIAMA 22/10/2005 321 X
    GIRLENE APARECIDA SILVA SOUZA BOCAIUVA 25/10/2005 124411 X
    GIRLENE APARECIDA SILVA SOUZA BOCAIUVA 27/10/2005 124411
    JAIME MANOEL CARVALHO OLHOS D'AGUA 25/10/2005 21245 X
    JENNIFER MARIA PEREIRA FONSECA GUARACIAMA 22/10/2005 321
    LIDIANE DE SOUZA FERREIRA OLHOS D'AGUA 25/10/2005 21245 X
    MARCIA HELOISA P. CARVALHO FC.DUMONT 23/10/2005 236 X
    MARIA JOSE FERREIRA

    Com sua consulta:
    if($opcao == 'TODAS') {

    Select fa.*, pa.* , pr.*
    From Fatura fa,
    paciente pa,
    Proc pr
    Where fa.cod_pac = pa.cod_pac
    And fa.cod_proc = pr.codigo
    And fa.dt_int between '$dtini' and '$dtfim'
    }

    RETORNA:
    CNPJ:18.803.072/0002-13
    PACIENTE ORIGEM DATA PROC.DIAG CM CP CC CO VALOR
    [/b]



  3. Desculpe ai amigo! So agora observei que realmente existe um erro da gravação dos codigos de procedimentos. Pois os mesmos não estão sendo validados como deveriam ser no cadastro de Procedimentos.
    Realmente funciona mesmo. Somente percebi isto agora, e graças a vc. Valeu mesmo e desculpe ai pelos transtornos. Na ancia de resolver o problema a gente acaba fazendo coisas precipitadas.


    Um abraço!

  4. A melhor coisa quando a casa está caindo, é levantar, ir tomar uma água ou um café, respirar fundo e rever o processo...
    Isso costuma funcionar na maior parte das vezes...
    :clap:



  5. #10
    Avenger
    Hum! To aki prá defender a posição do amigo que falou que 'sim, dá prá fazer a consulta em mais de duas tabelas, sim'. Desde que elas tenham uma 'relação' (sem ser a que o wps falou) entre elas. Tipo:
    Tabela a tenha 'id', tabela b tenha um 'a_id' que coincida com o campo 'id' da tabela a, e a tabela 'c' tenha um 'b_id' (preferencialmente) ou um 'a_id' (gera um pouco de confusão). daí os where's constariam algo como
    where b.a_id=a.id and c.b_id=b.id :P

    Xeu ver agora a tabelinha do dono do tópico:
    Já vi que no caso do fatura.cod_pa e paciente.cod_pa, nem todos os campos 'batem'. Por exemplo, o alguns apenas batem, e o restante aparentemente não há mais, na tabela pacientes 'cod_pa's que batam com a fatura.cod_pa.
    Daí apenas uma lista parcial deve retornar num select onde pacientes.cod_pa=fatura.cod_pa. Como foi o resultado que você nos exibiu. (por exemplo, o do cod_pa=460 (Paulo Adilson) não apareceu, certo?

    Agora prá a segunda comparação, relevando-se que a lista já está 'reduzida' devido à primeira condição, vamos verificar um teste em
    fatura.cod_proc=proc.codigo e ignorar aquelas datas:
    Olhando no conteúdo de sua 'fatura' e 'proc', quem se 'relaciona' (não um relacionamento de banco de dados, mas nossa relação 'lógica', que nos permite dar o select e pegar ítens das duas tabelas).
    não existe, na tabela proc, nenhum código 21245, ou 236 ou 325, mas sim 001254, 325100, 4580.... Portanto, para nenhum ítem cod_proc da tabela 'fatura' existe um codigo na tabela 'Proc' que seja igual ao da primeira tabela. Portanto, em nenhuma hipótese será exibido um ítem com essa condição, uma vez que ela nunca será satisfeita.

    Em outras palavras, enquanto você não adaptar os códigos para baterem com 'cod_proc', você não vai obter retorno. Além disso, você precisa consertar os cod_pa da tabela fatura para conter todos os códigos dos pacientes (e os respectivos códigos do serviço prestado a eles) para que

    para cada paciente na tabela 'Pacientes', exista uma correspondência na tabela 'Fatura'.
    Igualzinho a enunciado de Matemática! :P

    Espero ter exibido com clareza qual é o problema






Tópicos Similares

  1. Como recuperar uma tabela APAGADA no mysql
    Por web no fórum Servidores de Rede
    Respostas: 1
    Último Post: 21-04-2006, 19:18
  2. Replicação de Bases no Mysql [ resolvido]
    Por fred_m no fórum Servidores de Rede
    Respostas: 1
    Último Post: 09-06-2005, 17:13
  3. Relacionamento entre tabelas
    Por Andreya no fórum Linguagens de Programação
    Respostas: 2
    Último Post: 22-11-2004, 13:17
  4. relacionamento de campos entre tabelas no phpmyadmin
    Por no fórum Servidores de Rede
    Respostas: 1
    Último Post: 26-06-2003, 13:51
  5. Relacionamento entre tabelas no mysql
    Por voss no fórum Servidores de Rede
    Respostas: 0
    Último Post: 09-01-2003, 10:42

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L