manoaj 12 Denunciar post Postado Maio 23, 2013 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
Vinicius Rangel 208 Denunciar post Postado Maio 23, 2013 agora posta o select que vc esta tentando fazer a estrutura das suas 2 tabelas Compartilhar este post Link para o post Compartilhar em outros sites
manoaj 12 Denunciar post Postado Maio 23, 2013 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
Vinicius Rangel 208 Denunciar post Postado Maio 23, 2013 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
manoaj 12 Denunciar post Postado Maio 23, 2013 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 DesignerRotinas Design GráficoDesign Gráfico WindowsWindows Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Maio 23, 2013 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' Compartilhar este post Link para o post Compartilhar em outros sites
manoaj 12 Denunciar post Postado Maio 23, 2013 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
Vinicius Rangel 208 Denunciar post Postado Maio 23, 2013 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
manoaj 12 Denunciar post Postado Maio 23, 2013 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
Vinicius Rangel 208 Denunciar post Postado Maio 23, 2013 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
manoaj 12 Denunciar post Postado Maio 23, 2013 concertei o select, e novo erro FUNCTION dinstinct does not exist Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 23, 2013 http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html http://dev.mysql.com/doc/refman/5.1/en/any-in-some-subqueries.html Compartilhar este post Link para o post Compartilhar em outros sites
manoaj 12 Denunciar post Postado Maio 23, 2013 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
Vinicius Rangel 208 Denunciar post Postado Maio 23, 2013 posta como vc ta fazendo, por favor. Compartilhar este post Link para o post Compartilhar em outros sites
manoaj 12 Denunciar post Postado Maio 23, 2013 <?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
Vinicius Rangel 208 Denunciar post Postado Maio 23, 2013 faça um teste com usuário isolado para testar, aparentemente ta tudo certo Compartilhar este post Link para o post Compartilhar em outros sites
manoaj 12 Denunciar post Postado Maio 23, 2013 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
Vinicius Rangel 208 Denunciar post Postado Maio 23, 2013 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