Voici ma requête mysql ci-dessous. Grâce à de nombreuses questions et commentaires utiles, je suis presque à la fin de mon voyage. L'idée derrière cette requête est qu'un utilisateur soumet un lien, l'application insère deux lignes, une dans des liens et une autre dans des votes (un vote par défaut, pourquoi un utilisateur ne voterait-il pas pour sa propre soumission?) Alors chaque vote est juste une autre rangée dans la table des votes avec soit un karma_up
ou karma_down
égal à 1 (bientôt être changé en karma_delta
pour économiser sur la colonne supplémentaire.J'ai aussi l'algorithme de popularité là-dedans qui semble être b0rking ma requête. erreur.Mysql Erreur: # 1247 - Référence 'karma' non pris en charge (référence à la fonction de groupe)
#1247 - Reference 'karma' not supported (reference to group function)
le point de l'ensemble de la majorité de cette requête est d'obtenir le karma
SELECT links.*, (SUM(votes.karma_up) - SUM(votes.karma_down)) AS karma
FROM links, votes
WHERE links.id = votes.link_id
GROUP BY votes.link_id
ORDER BY (karma - 1)/POW((TIMESTAMPDIFF(HOUR, links.created, NOW()) + 2), 1.5) DESC
LIMIT 0, 100
Sans l'algorithme de popularité de la partie ORDER BY
, la requête s'exécute parfaitement, ajoutant le karma sommé de la table votes
et virant sur une colonne supplémentaire avec sa valeur.
Vraiment? C'est le truc? Je ne peux pas utiliser un alias? Bon sang, vous pourriez juste me suivre pour le karma gratuit. –
@TheLizardKing: Vous pouvez utiliser un alias pour une requête plus simple. (Au moins pour SQL 5.1) –
effectivement vous pouvez commander par un alias. des graduations généralement en retour sont requises autour du nom d'alias. Cependant, pas un alias qui est le résultat d'une fonction de groupe telle que SUM dans ce cas lorsqu'il est combiné avec GROUP BY –