Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

juniorbezerra

Qual seria a melhor solução?

Recommended Posts

Bom galera tenho um problema e gostaria de saber qual seria a melhor solução pra resolvê-lo, vamos lá.

 

Tenho duas tabelas no banco de dados

 

cad_certidao

- id_certidao

- certidao

 

Onde cadastro todas as certidões que o usuário irá escolher em vários checkbox (que não vem ao caso no momento).

 

E outra tabela:

 

certidao

id

id_certidao

id_usuario

data_emissao

data_validade

 

Bom agora é o seguinte, gostaria de mostrar todas as certidões da tabela cad_certidao e marcar as que o usuário escolheu na tabela certidao através do id_usuario que resgato via GET.

 

Pensei em usar dois selects mais não vi uma lógica, pelo INNER JOIN me retornou apenas as certidões que o usuário escolheu:

 

INNER JOIN usado:

$sql = "SELECT * FROM cadcertidao INNER JOIN certidao ON (cadcertidao.id_certidao = certidao.id_certidao) WHERE certidao.id_usuario = '{$id_usuario}'";

Qual seria uma boa solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

juniorbezerra,

 

Não entendi muito bem, mas se você fizer a condição WHERE pelo id_usuario só vai retornar os registros que obedecerem essa condição...

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei disso Leco RP mais quero que mostre tudo de uma tabela e da outra apenas marque no checkbox a condição que for verdadeira.

 

Exemplo:

tabela A mostra todos os registros;

tabela B marca no checkbox os registros que foram gravados na tabela pelo ID;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que eu entendi da descrição, acho que vc devia tentar um RIGHT JOIN. Se não der, tente o OUTER e o LEFT tb... kkkkkkk
Quando o que eu imagino não dá certo, eu tendo a tentar os outros até encontrar...

 

Se eu entendi errado, me desculpe... :assobiando:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Blza RobyFLC, vou dar uma olhada assim, mais vou tentar explicar melhor, mais detalhado...

 

Vamos supor que na tabela A tenha 100 registros:

 

Certidao 1

Certidao 2

.

.

.

Certidao 100

 

Elas são mostradas ao usuário na hora do cadastro e ele marca os checkbox, até ai tranquilo. Tenho a Tabela B que grava as certdioes selecionadas através do id da certidao e o id do usuario.

 

Ficando assim

 

id_certidao = 1 - id_usuario = 1

id_certidao = 45 - id_usuario = 1

 

Agora nessa página que estou tentando fazer quero continuar mostrando todas as certidões da Tabela A, mais dando um check nas que o usuário escolheu pegando da Tabela B.

 

Resumindo não quero mostrar apenas as certidões que o usuário selecionou...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acima faz um while.

 

e em baixo utiliza o PHP para verificar se foi marcado um checkbox, caso tenha sido marcado mostrar, coloca as checkbox como array dentro do formulario e utilizado o foreach para mostrar os dados selecionados.

 

com o while em cima sempre vai aparecer o while.

 

Este post solucionou a sua dúvida, peço que coloque como resolvido e me der um ponto positivo de reputação para que eu possa continuar ajudando outros colegas como você.

Caso não solucione o seu problema, peço que coloque a sua dúvida abaixo.

 


Att: João Paulo Sousa Supriano

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro paulinhosupriano vc viu que tenho duas tabelas? Como faria um while e de pois foreach, essa minha dúvida. Poderia colocar dois selects aninhados, quero saber se essa seria a melhor solução.



Cheguei a esse código que ilustra bem o que eu quero, claro sem os devidos checkbox e tals, mais a dúvida persiste, é a MELHOR OPÇÃO?

$id = 1; // Apenas ilustração

$sql = "SELECT * FROM cadcertidao"; 
$query = mysql_query($sql) or die (mysql_error());

while ($row = mysql_fetch_assoc($query)){
    
    $busca = mysql_query("SELECT * FROM certidao WHERE id_usuario = '{$id}'");
    
    while($dados = mysql_fetch_assoc($busca)){
        //echo $row['id_certidao'].' - '.$dados['id_certidao'].'<br>';
        if($dados['id_certidao'] === $row['id_certidao']){
            echo $row['certidao'].' = Existe <br>';
        } else {
            echo $row['certidao'].'<br>';
        }
    }   
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se existe uma ligação entre as duas tabelas, use um LEFT JOIN e pronto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá meu amigo.

 

Você quer mostrar todos os dados da tabela, beleza então vai ser um select * from tabela, e também quer mostrar separadamente os registros escolhidos pelo creckbox então colocaria em um array e usaria o foreach.

 

se queres seleciona os dados de uma outra tabela com relacionamento usa-se o join.



Usando o mesmo.

 

SELECT tabela.campos_da_tabela_x , outratabela.campo_da_outra_tabela_x FROM tabela, outratabela  WHERE tabela.campochave = outratabela.campo_chave


Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o select e passou legal mais agora como mostrar as certidões que determinado usuário selecionou?

 

Como está:

$id_usuario = 1;

$sql = "SELECT a.certidao, b.dt_emissao
        FROM cadcertidao AS a
        JOIN certidao AS b ON b.id_certidao = a.id_certidao";

$query = mysql_query($sql) or die (mysql_error());
$resultado = mysql_num_rows($query);

while ($row = mysql_fetch_assoc($query)){
    echo $row['certidao'].' - '.$row['dt_emissao'].'<br>';
}

Agora se uso o select assim:

$sql = "SELECT a.certidao, b.dt_emissao
        FROM cadcertidao AS a
        JOIN certidao AS b ON b.id_certidao = a.id_certidao
        WHERE b.id_usaurio = '$id_usuario'";

Ele mostra apenas o que usuário cadastrou, não mostra a lista com todas as certidões da tabela cadcertidao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E teria como listar apenas os campos da tabela que o usuário não cadastrou?

Exemplo:

 

certidão 1

certidão 2

certidão 3

 

Suponhamos que ele marcou a certidão 3, então iria mostrar:

certidão 1

certidão 2

 

Lembrando que são em duas tabelas

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.