Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
to com uma duvída bem chata, gostaria de uma luz!
Tenho uma especie de sistema de permissões, onde cada usuario pode ficar responsável por certas areas do sistema.
Para fazer isso funcionar, eu criei 3 tabelas, uma para usuarios (User), uma para as areas (partners) e outra para relacionar as duas tabelas anteriores (userPartners)
Explicando melhor as tabelas:
Tabela User:
id,nome,login,senha,etc
Tabela Partners:
partnerId,partnerName,...
Tabela userPartners:
partnerId,userId
O meu problema é cruzar as tabelas, eu preciso de um select com as seguintes informações, partnerId, partnerName(que está na tabela Partners e não na tabela de associação). Básicamente é essa minha dúvida, atualmente meu SELECT tá assim:
$qPartnerSelect = "SELECT `userpartners`.*, `users`.`nome` FROM `userpartners` INNER JOIN `users` ON `userpartners`.`userId` = `users`.`id` ORDER BY `userpartners`.`partnerId` ASC";
Desse modo eu encontro os resultados mas não consigo imprimir o nome do "partner".
Agradeço a ajuda de todos,
Dênis Fernandes
Muito obrigado, colando seu código deu um errorzinho (Unknown column 'userpartners.partnerId' in 'order clause'.)
Então dei um toque, e funcionou perfeito!
Segue aqui o código atual(Pouquissima diferença):
$qPartnerSelect = "SELECT p.partnerId, p.partnerName, u.nome
FROM userpartners up
INNER JOIN users u ON up.userId = u.id
INNER JOIN partners p ON up.partnerId = p.partnerId
ORDER BY up.partnerId ASC";
EDIT
Eu me esqueci de um pequeno detalhe, existe uma condição, onde o userId da tabela userPartners tem que ser igual ao id da tabela User.
Tentei arrumar essa condição, mas não tive sucesso, alguma idéia?
Att,Dênis Fernandes
up.userId = u.id
É o que já está feito aqui :huh:
A grosso modo sim, mas o que tá acontecendo é o seguinte, usuarios que pela lógica não teriam permissão para acessar certa area, estão com livre acesso, ou seja o SELECT tá fazendo uma busca por inteiro sem excluir usuários que não poderiam acessar certas areas.
Usuário que deveria ter acesso:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img215.imageshack.us/img215/246/user1m.jpg&key=c9149765a840cf20e687b1af1a1be5c3ff997a73ea511fe3c6f8b7b7d803a570" alt="user1m.jpg" />
Usuário que não deveria:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img804.imageshack.us/img804/9486/user2.jpg&key=5be512e27cd937131a9a72e84ee1aaf7398d49571a11421b72f4607737d7b96d" alt="user2.jpg" />
Viu? qualquer um pode selecionar ali, sendo que era pra no segundo caso só aparecer 1 partner.
Alguma idéia?
Att,Dênis Fernandes
Acrescenta o id do usuário no Where para filtrar as permissões dele:
$qPartnerSelect = "SELECT p.partnerId, p.partnerName, u.nome
FROM userpartners up
INNER JOIN users u ON up.userId = u.id
INNER JOIN partiners p ON up.partnerId = p.partnerId
WHERE U.id = {$id}
ORDER BY `userpartners`.`partnerId` ASC";Poxa, muito obrigado, agora funcionou perfeito!!
Precisando, tamo aê!
att,Dênis Fernandes
userpartnersup INNER JOINusersu ON up.userId= u.idINNER JOINpartinersp ON up.partnerId = p.partnerId ORDER BYuserpartners.partnerIdASC";