Ir para conteúdo

POWERED BY:

Arquivado

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

diasgabrie

Sistema de "Like" igual facebook

Recommended Posts

Olá amigos,

 

 

meu cliente me pediu um site de vendas de produtos, onde o usuário tem a opção de "curtir" os produtos a venda.

 

Então criei um tabela Produtos no sql com os seguintes campos:

 

Id, Produto, Curtiu, N_de_curtidas

 

O campo curtiu armazenará todos os usuários que curtiram e o campo n_de_curtidas será somente um contador (20 curtiram).

O campo curtiu ficará por exemplo: Maria;João;Pedro;Paulo;

Insere o usuário com ";" no final.

 

Optei por este modo pois achei que criar uma tabela Like no sql só para curtidas poderia ficar muito grande e consumir muito espaço no sql, ficaria assim:

Id_Produto, usuário_que_curtiu

Se tivesse 1000 curtidas, teria 1000 linhas a tabela. Do modo que fiz, ele só acrescenta um usuário com ";" e aumenta 1 numero no campo n_de_curtidas.

 

Porém vem com isso alguns problemas. Como posso saber que um usuário já curtiu o produto para permitir que ele clique em descurtir?

 

- Exemplo: leio no SQL o seguinte resultado: Maria;João;Pedro;Paulo;

- Quero, pelo PHP, saber se "João;" curtiu o produto. Qual função utilizo para verificar se existe o usuário neste campo?

- Verificado que existe o "João;" e ele clicando em descurtir, como tiro só o nome dele da lista?

 

Obrigada,

Gabriela

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Noite Gabriela,

 

Modela isso direito.. de verdade.. não importa se a sua tabela vai ter 1000 linhas. Isso é pouco, e está muito longe do que o MySQL aguenta.

Modela corretamente, ai você vai conseguir fazer o sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo você faz o seguinte

 

tabela cutir

 

login|produtor|status

 

 

em login login do usuario produto o produto que ele ja curtiue status você bota 0 se nao cutiu e 1 se ja cutiu

 

ai você faz o select

 

select * from cutir where login="o login do usuario" and produto="nomedo produto ow id" OR status="0"

ai você bota o echo

cutir e usar o else

e coloca descuitr

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, não é difícil fazer isso, só que estou totalmente de acordo com o William Bruno.

Não compensa fazer dessa maneira que está querendo, pois da mesma forma que ocupa menos espaço no Banco, sua página terá mais tempo de carregamento, 1.000 linhas para um Banco não é muita coisa.

E quando você tiver 1.000.000 linhas +- (que espero que tenha), concerteza o seu sistema já vai ter um lucro para um servidor maior.

 

Com uma estruturação boa, poupará serviços e dores de cabeça, imagina que o produto tenha recebido, 2.000 'likes', e essa uníca linha de problema? Quanta dor de cabeça em?

 

Mais deixando isso de lado, vou te dar uma força no seu problema, a lógica é bem simples, primeiro faça um 'SELECT' buscando o campo com todos os Ids (trabalhe com Ids), que curtiram o produto, e guarde em uma varíavel.

 

Ficará algo assim, $buscaIds = '1; 2; 3; 4; 5';', depois você faz um explode no ';', e ficará tudo em um 'array'.

 

Pronto agora é só você verificar se possui o Id do usuário no array.

 

Assim...

$buscaIds  = '1; 2; 3; 4; 5';   // Retorno de sua 'SELECT' no Banco, trabalhe com Ids não com nomes.
$tbEx      = explode(';',$tb);  // Faça um explode para separar os Ids;
$usuarioId = '2';               // Id do usuário.
if(in_array($usuarioId,$tbEx)){ // Agora você faz uma verificação simples.  
echo 'Ja esta presente em nosso Banco de Dados';
}else{
echo 'Não esta presente';
}

Mais fácil do que você pensou né? Um conselho? Não faça dessa forma, estrute tudo certinho na tabela 1 like, 1 linha, e você não terá problemas no futuro. Falô.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal!

 

Muito obrigada pelas respostas! Ajudaram bastante!

 

Então, pensei desta forma pois o cliente possui um servidor sql com pouco espaço e me disse que queria tabelas mais econômicas possíveis.

 

Realmente não sei o impacto que essa lógica "as avessas" poderá causar se o sistema crescer bastante, muito obrigada pelas dicas. Vou conversar com o cliente.

 

Muito obrigada pela função, ProgramadorDesktop!

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.