2010-12-15 31 views
2

J'essaie de sélectionner les dix propriétés les plus similaires pour une propriété donnée dans un site immobilier et je me demandais si vous pouviez m'aider. Les variables avec lesquelles je travaille seraient price (int), area (int), salles de bains (int), chambres à coucher (int), suites (int), parking (int). Pour le moment, je pense à commander par ABS (a-b) mais cela ne serait-il pas lent si je devais calculer cela à chaque fois qu'une propriété est vue? (Je ne suis pas sûr que je pourrais mettre en cache ceci puisque la base de données est constamment mise à jour) Y at-il une autre option?Lignes similaires dans MySQL

Merci pour votre aide!

+0

Si vous êtes préoccupé par la vitesse, ne pouvez-vous pas l'ajouter comme un autre champ et la mettre à jour? Peut-être via un déclencheur? – Orbling

Répondre

2

Une solution pourrait être de créer une nouvelle table contenant le résultat prêt. Comme ceci: -

property_id similar_properties_ids 
-------------------------------------- 
1    2,5,8 
2    3,10 
... 
... 

Et Cron en cours d'exécution à intervalles réguliers faire le calcul pour toutes les propriétés et remplir le similar_properties_ids. Donc, lors de l'exécution, vous n'avez pas le temps de calcul mais l'inconvénient est que vous obtenez des résultats un peu anciens (mis à jour lors de la dernière exécution de cron).

+0

Cette structure de base de données n'est pas utile - il serait préférable de conserver les ID des propriétés similaires dans des lignes séparées d'une table. –

+0

Cette table sert uniquement à collecter les ID des propriétés associées lors de l'exécution. Les tables d'origine qui stockent les propriétés sont intactes. Lorsque les ID sont là, alors si des informations sur les propriétés connexes sont nécessaires, ces tables peuvent être interrogées en utilisant ces ID. Vous pouvez créer une ligne pour each_properties_id pour chaque propriété_id dans cette table, mais vos requêtes de mise à jour et de récupération deviennent un peu complexes. –