Ir para conteúdo

POWERED BY:

Arquivado

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

manoaj

Problema com logica em um SELECT

Recommended Posts

oi to com probleminha aqui na hora de fazer um select, eu tenho duas tabelas uma cursos e a outra matricula , essa tabela cursos guarda o id dos cursos existentes e a tabela matriculas guarda o email do usuario e os cursos em que o usuario esta matriculado.

 

quando o usuario faz o login eu queria por uma pagina que mostra todos os cursos que ele ainda não esta matriculado, mas eu não to consseguindo fazer o select funcionar desta maneira pq eu preciso verificar quais os cursos o usuario não esta matriculado antes de exibilos.

 

como eu resolvo isso pessoal?

Compartilhar este post


Link para o post
Compartilhar em outros sites


CREATE TABLE IF NOT EXISTS `cursos` (
`id_curso` int(11) NOT NULL AUTO_INCREMENT,
`nome_curso` varchar(300) NOT NULL,
`descricao_curso` text NOT NULL,
PRIMARY KEY (`id_curso`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;



CREATE TABLE IF NOT EXISTS `matriculas` (
`id_matri` int(11) NOT NULL AUTO_INCREMENT,
`email_user_matri` varchar(150) NOT NULL,
`id_curso_matri` int(11) NOT NULL,
`data_matri` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id_matri`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

<?php

$NewCourses = mysql_query("SELECT * FROM cursos WHERE id_curso != '$Cursoativo'");
while($ResNewCourses = mysql_fetch_array($NewCourses)){
$ResNewCourses['nome_curso'];
?>

 

no caso curso ativo $Cursoativo seriam os cursos que o usuario logado esta cadastrado essa variavel era resultado de um outro select na tabela matriculas e exibiria os cursos do usuario mas isso ta tudo errraaaaaaaado kkkk ajuda eu ae :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT a.*
FROM cursos as a, matriculas a b
WHERE a.id_curso != b.id_curso_matri and  AND b.email_user_matri = 'email@email.com'

senti falta do id do usuário ai mas isso deve funcionar

 

@edit

faltou o alias no where, agora arrumei

Compartilhar este post


Link para o post
Compartilhar em outros sites

mano ele mostrou todos os cursos e aunica coisa que fez de diferente foi mostrar os cursos que o usuario nao estava cadastrados duas vezes ficando assim o resultado

 

o usuario esta cadastrado nos dois primeiros cursos que não estão repetidos a e quanto ao id eu estou usando email pra identificar o usuario.

 

Web Designer
Rotinas


Design Gráfico
Design Gráfico


Windows
Windows

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT dinstinct(a.id_curso), a.nome_curso FROM cursos as a, matriculas a b WHERE a.id_curso != b.id_curso_matri and  AND b.email_user_matri = 'email@email.com'

 

mano esse and tem que ser duas vezes

a.id_curso != b.id_curso_matri and  AND

e o matriculas a b não deveria ser matriculas as b ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mano esse and tem que ser duas vezes

Por que? vc não quer saber os cursos que o usuário não esta.

então é isso

 

 

 

e o matriculas a b não deveria ser matriculas as b ?

O que?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim mas precisa repetir o and duas vezes não entendi pq e a segunda duvida era quanto ao

cursos as a, matriculas a b pq cursos como a e matriculas como b, ai vc colocou matriculas a b, ai achei que fosse as b, bom vou testar aqui do jeito que vc coloco.

 

 

erro foi o seguinte que o php mostrou Not unique table/alias: 'a'

Compartilhar este post


Link para o post
Compartilhar em outros sites

o jeito correto é as

 


matriculas as b

 

 

mas precisa repetir o and duas vezes

Não, não precisa eu to passando mal e to com problemas na digitação.

acho que vou pro médico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

parece que o select ta ignorando essa condição b.email_user_matri = 'email@email.com' pq ta exibindo todos os cursos :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
$NewCourses = mysql_query("SELECT DISTINCT a.id_curso, a.nome_curso FROM cursos as a, matriculas as b WHERE a.id_curso != b.id_curso_matri AND b.email_user_matri = '$EmailUserOn'");
while($ResCourses = mysql_fetch_array($NewCourses)){

echo $ResCourses['nome_curso'].'<br>';
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ta tenso isso kkkk bom quando vc diz isolar se esta se referindo a selecionar um usuario em especifico para fazer os testes já fiz não funcionou. existe outra maneira de fazer este select ou é só assim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

existem x maneiras de se fazer isso mas no final "daria na mesma" o resultado.

 

tem alguma bucha de lógica ai.

 

o select traduzido seria algo como:

 

SELECT todos os cursos sem repetir eles da tabela a,b

ONDE

o id da tabela a tem que ser diferentes dos que tem na tabela b e o usuário é o X

 

pode tentar tabém

 

 

 

SELECT * FROM cursos WHERE id_curso NOT IN(SELECT id_curso_matri FROM matriculas WHERE email = 'email')

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.