2011-05-09 6 views
0

J'ai une table post et une table reply. Les deux tables ont une colonne created qui enregistre lors de sa création. et la table post a un last_reply_created et est mis à jour chaque fois qu'une réponse a été faite à un message avec cet identifiant.Ordre mysql par plusieurs colonnes

première question: dans la page des messages, je veux afficher tous les messages qui ont trié par ce qui last_reply_created ou created dans le tableau de la poste vient en premier.

deuxième question: Pouvez-vous concevoir le poste et la table de réponse mieux concernant ce problème?

Ma solution consiste à insérer last_reply_created chaque fois qu'un post est créé.

Répondre

1

Votre last_reply_created doit être NULL jusqu'à ce qu'il y ait une réponse et l'heure de création pour une réponse doit toujours être plus récente que la valeur created. Cela vous permet d'utiliser coalesce comme ceci:

select * 
from your_table 
order by coalesce(last_reply_created, created) desc 

Et sans doute chaque ligne a une created non NULL.

Je ne vois aucun problème avec la mise en cache de la valeur last_reply_created dans votre tableau de la poste. Si vous l'utilisez beaucoup, cela n'a pas beaucoup de sens de continuer à le calculer encore et encore.

+0

Merci pour ce conseil, je n'ai jamais remarqué ce changement monsieur! Tué ma réponse comme la tienne est suffisante :) –

+0

@David: Je ne voulais pas pleuvoir sur ton défilé mais tu dois toujours garder un œil sur ces valeurs nulles. –