Pergunta

Eu estou pedindo a você alguns conselhos.Eu tenho um site onde eu tenho vídeos e os usuários podem dar-lhes os polegares para cima e o polegar para baixo.Sua guardado em uma única tabela.Atualmente tenho três consultas sql para obter a contagem de polegar para cima, a contagem dos polegares para baixo e que o usuário conectado deu (se ele tiver).

E agora eu estou pensando sobre fazer o que mais o desempenho, mas eu não sei o que é melhor, pois quero manter a contagem de consultas para baixo.

Método 1) Manter estes três consultas como eles são:

SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '1' LIMIT 1
SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '0' LIMIT 1
SELECT * FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `uid` = '1' LIMIT 1

Método 2) Fazer uma consulta com o sub-consultas (algo parecido (não funciona como é aqui)):

SELECT *, (SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '1' LIMIT 1) as thumbsups, (SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '0' LIMIT 1) as thumbsdowns FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND (`uid` = '1' OR `uid` = NULL)

Método 3) a Sua própria idéia, talvez?

Me diga o que você pensa e dar algum código (se você quiser).

Melhores Cumprimentos Charlotte

editar:Eu vou adicionar mais algumas informações:vid é o id do vídeo.Tudo sobre o que gosta é armazenado nesta tabela, referenciados para o vídeo com o Bk (vid).uid é o id de usuário que deu a gostar (ou não gostar).Isso significa que não há apenas o que gosta e o que não gosta de um vídeo para esta tabela.Para saber o que gosta e não gosta que, por vídeo, como será armazenado com o bk.

Foi útil?

Solução

Ou você pode usar uma única consulta para cima/para baixo votos:

SELECT SUM(thumb = 1) AS upvote, SUM(thumb = 0) AS downvote, ....

O MySQL irá tomar as boolean true/false resultados dessas thumb = X testes, converter para inteiro 0 ou 1, e , em seguida, soma-las

Outras dicas

Você pode combinar as duas primeiras consultas como:

SELECT
  SUM(IF(`thumb` = 1, 1, 0)) AS rowcountthumb0,
  SUM(IF(`thumb` = 0, 1, 0)) AS rowcountthumb1
FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx'

Desde a última consulta parece ser semanticamente diferentes, gostaria de mantê-lo separado do referido aqui para maior clareza.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top