Array
(
)

Dúvida com SQL em três tabelas

Elenilton Freitas
   - 26 out 2015

Olá, pessoal!
Estou a seguinte estrutura de tabelas:
TABELA FALTAS
#Código

CREATE TABLE faltas(
  `id_falta` int(11) NOT NULL auto_increment,
   `numero_falta` varchar(100) NOT NULL,
    `tipificacao` varchar(100) NOT NULL,
   `data_fato` date NOT NULL,
  `hora_fato` time NOT NULL,  
  `status` varchar(100) DEFAULT NULL,
  PRIMARY KEY  (`id_falta`),
  UNIQUE KEY `Numero_falta` (`numero_falta`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
"


TABELA FALTAS_AUTORIA
#Código
CREATE TABLE falta_autoria (
  `id_` int(11) NOT NULL auto_increment,
   `numero_falta` varchar(50) NOT NULL, 
  `nome_autoria` varchar(255) NOT NULL,
   PRIMARY KEY  (`id`)
  ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


TABELA FALTAS_ALVOS
#Código
CREATE TABLE faltas_alvos (
  `id_` int(11) NOT NULL auto_increment,
   `numero_falta` varchar(50) NOT NULL, 
  `nome_alvo` varchar(255) NOT NULL,
   PRIMARY KEY  (`id`)
  ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


O numero_falta é um registro, tipo: 222/2015
Cada falta pode ter vários autores e vários alvos.
Tenho dois registros de faltas, mas meu sql me retorna ou os dois, sem o nome dos autores e alvos (4 em cada) ou vários registros (aí sim, mostrando todos os autores e alvos.
Já usei distinct e nada...

Marcos P
   - 26 out 2015

Elenilton ?

Qual o esquema de relacionamento entre as tabelas ?

Quais as chaves estrangeiras que suportam esses relacionamentos ?

Qual a query que você construiu ? Por quê ela falha, qual o resultado obtido e qual o resuldado esperado ?

Citação:
Tenho dois registros de faltas, mas meu sql me retorna ou os dois, sem o nome dos autores e alvos (4 em cada) ou vários registros (aí sim, mostrando todos os autores e alvos.


Temos que concordar que a explicação acima, não é lá muito clara...

Vá no Fiddle, crie a estrutura, insira alguns registros e retorne aqui, que eu lhe auxílio com isso...

OK ?!?

Elenilton Freitas
   - 26 out 2015

Nao consegui usar o site...diz que algo aconteceu de errado.

Eu tenho dois registros na tabela faltas. Um registro nela deveria me trazer quatro registros das outras duas tabelas.Mas,ou repetem os registros da tabela faltas, de acordo com a quantidade das outras duas ou usando DISTINCT, me retorna os dois registros da tabela faltas mostrando apenas dois registros das demais tabelas e nao quatro...

Espero ter me explicado direito...

Marcos P
   - 26 out 2015

O Fiddle dificilmente apresenta problemas, desde que não existam erros de sintaxe no seus comandos.

Sem as respostas das perguntas que coloquei ou a criação de uma ambiente de simulação, fica difícil lhe ajudar.

Elenilton Freitas
   - 26 out 2015

Fiz lá o que pediu. Não sei mais o que é para fazer... http://sqlfiddle.com/#!9/4d864d/1

Marcos P
   - 27 out 2015

Abaixo da janela aonde você criou a estrutura das tabelas, coloque os inserts de dados, para populá-las...

Na janela da direita você coloca a query que tentou fazer ( veja o exemplo que coloquei lá... ) e partimos daí para resolver o problema...

Se preferir, coloque teu skype ou gtalk aqui, que te chamo quando tiver um tempo...

Elenilton Freitas
   - 27 out 2015

Estou quase tendo um treco...Fiquei até de madrugada e a manha toda entre tentativas e gente tentando ajudar, entraram indianos, iraquianos e marcianos via teamviwer e nada... esse site aí tem horas q nao carrega.... se tiver como auxiliar via teamviwer.... whats 73 99921633

Marcos P
   - 27 out 2015

Te chamei no whats...

Marcos P
   - 28 out 2015

#Código

CREATE TEMPORARY TABLE IF NOT EXISTS tmpTable AS (
select A.numero_inquerito, A.tipificacao, A.status,

       (select id from inqueritos_vitimas where a.id_inquerito = id_inquerito limit 1) as IDV1,
       (select id from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1) limit 1) as IDV2,
       (select id from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1,IDV2) limit 1) as IDV3,
       (select nome_vitima from inqueritos_vitimas where a.id_inquerito = id_inquerito limit 1) as NomeV1,
       (select nome_vitima from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1) limit 1) as NomeV2,
       (select nome_vitima from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1,IDV2) limit 1) as NomeV3,

       (select id from inqueritos_autoria where a.id_inquerito = id_inquerito limit 1) as IDA1,
       (select id from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1) limit 1) as IDA2,
       (select id from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1,IDA2) limit 1) as IDA3,
       (select nome_autoria from inqueritos_autoria where a.id_inquerito = id_inquerito limit 1) as NomeA1,
       (select nome_autoria from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1) limit 1) as NomeA2,
       (select nome_autoria from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1,IDA2) limit 1) as NomeA3
 from inqueritos a);

 select numero_inquerito, tipificacao, status,
        NomeV1 as Vitima1, NomeV2 as Vitima2, NomeV3 as Vitima3,
        NomeA1 as Autor1, NomeA2 as Autor2, NomeA3 as Autor3
 from tmpTable;

 drop temporary table tmpTable;

Elenilton Freitas
   - 03 nov 2015

Desculpa a demora...

Resolvi com três querys. Mas sua query acima vai me servir essa parte:

Citação:

select A.numero_inquerito, A.tipificacao, A.status,

(select id from inqueritos_vitimas where a.id_inquerito = id_inquerito limit 1) as IDV1,
(select id from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1) limit 1) as IDV2,
(select id from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1,IDV2) limit 1) as IDV3,
(select nome_vitima from inqueritos_vitimas where a.id_inquerito = id_inquerito limit 1) as NomeV1,
(select nome_vitima from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1) limit 1) as NomeV2,
(select nome_vitima from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1,IDV2) limit 1) as NomeV3,

(select id from inqueritos_autoria where a.id_inquerito = id_inquerito limit 1) as IDA1,
(select id from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1) limit 1) as IDA2,
(select id from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1,IDA2) limit 1) as IDA3,
(select nome_autoria from inqueritos_autoria where a.id_inquerito = id_inquerito limit 1) as NomeA1,
(select nome_autoria from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1) limit 1) as NomeA2,
(select nome_autoria from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1,IDA2) limit 1) as NomeA3
from inqueritos a;



A query completa nao retorna registros no phpMyAdmin.