2009-11-28 6 views
1

J'ai donc une table users; stocker des choses comme nom d'utilisateur, email, etc. J'ai alors une table user_settings. Au lieu de colonnes standard comme timestamp_logged_in, profile_views, etc., je l'ai organisé en combo clé/valeur. Par exemple, les colonnes sont:Tri par type de colonne inconnu dans mysql

user_settings_ID valeur nom user_ID

Un enregistrement de l'échantillon serait: 82 2 'timestamp_logged_in' '2009-10-10 02:23:53'

Cela rend la réglages un peu plus perméable. Je n'ai pas besoin d'une colonne pour stocker de nouveaux types de paramètres utilisateur. Je suis préoccupé par le fait que cela (qui va stocker chaque valeur sous forme de chaîne, et je vais le lancer au type approprié dans le milieu) rendra difficile le tri. Ainsi, par exemple, si je voulais obtenir la liste des utilisateurs dans l'ordre de la dernière connexion, le tri nécessiterait un appel SQL tel que:

SELECT user_ID FROM user.settings WHERE état = 'open' AND name = 'timestamp_logged_in 'ORDER BY name

Il s'agirait de trier les enregistrements trouvés en tant que chaînes, cependant. Est-il possible de s'assurer que l'algorithme de tri mysql est implémenté en fonction d'un certain type de valeur (par exemple en le forçant à traiter la colonne de tri comme une chaîne, un entier, un datetime, un horodatage, etc.)?

Toutes les pensées seraient vraiment appréciées. Merci. Oliver Nassar

Répondre

3

Vous devez manuellement cast le type de données correct.

Si vous vous attendez à ce que la table devienne volumineuse, stocker des paires valeur/clé comme ceci, alors que cela semble être une bonne idée au début, aboutit invariablement à des performances vraiment nulles. Pensez-y maintenant au lieu de changer plus tard.

+0

bon point. Quelle est votre classification de «devenir grand»? – onassar

0

Pourquoi ne pas stocker les données dans un « sortable » représentation de chaîne .. « pré-coulée à un format sortable »

au lieu de '11 11:45' -28 à 2009, vous pouvez l'enregistrer comme « 2009,11 .28 11:45 '

MySQL a les fonctions nécessaires pour revenir à "datetime" ou "date" dans le "middleware".

+0

je ne sais pas trop pourquoi middleware était entre guillemets. cela pourrait fonctionner, mais cela signifie un effort considérable dans le «middleware» pour formater les choses de manière non conventionnelle. – onassar

+0

Les conversions devront être effectuées à un moment ou un autre, si vous avez l'intention de trier les données stockées dans une chaîne. Soit une fois lors de l'écriture et une fois lors de la lecture (par ligne/champ) ou à chaque fois lors de la comparaison lors d'un tri. Je mets des intergiciels entre guillemets, puisque je ferais probablement la conversion dans le client, ou serveur d'applications, pas dans le code de communication. Considérez également le commentaire de Donnie sur la performance (mieux à concevoir avec la performance/mise à l'échelle en tête). Si votre nombre de lignes dans user.settings est> 100'000, je suggère fortement les champs dactylographiés/dédiés par user.config entry – lexu

+0

Merci mec. Je prévois sur la table d'être 200k + enregistre la porte donc je vais suivre les suggestions. Merci Monsieur. – onassar