classé par l'utilisateur, je briserai cela en deux parties:Trouvez le meilleur match de MySQL pour la liste
J'ai un utilisateur avec une liste de produits « caractéristiques » qu'il désire. L'utilisateur est invité à classer ces fonctionnalités de 1-10. J'ai aussi une table pleine de produits. Chacun de ces produits a diverses caractéristiques. Certains produits auront toutes les fonctionnalités 1-10, mais certains n'en auront que quelques-uns. Je voudrais déterminer quel produit correspond le mieux au classement de l'utilisateur, et fournir un ensemble de résultats ordonné à l'utilisateur, avec la meilleure correspondance en premier et la pire en dernier.
La requête mentionnée ci-dessus n'est en fait qu'une partie de ce que fait l'utilisateur. L'utilisateur fournit également d'autres critères de recherche (par exemple, catégorie de produit, prix, etc.) avec le classement des caractéristiques. Par conséquent, j'aimerais que la fonctionnalité de correspondance ne s'applique qu'aux produits qui passent par cet ensemble de filtres. Comment pourrais-je les combiner?
J'ai trouvé des questions similaires comme this et this, mais ils ne sont pas assez près pour moi de comprendre comment appliquer ces solutions à ma situation.
Les tables impliquées ressembler à quelque chose comme ceci:
produits (id, produits)
caractéristiques (id, fonctionnalité)
product_features (id, product_id, feature_id)
et la l'utilisateur soumettra sa recherche à travers un tableau comme celui-ci (où les clés sont en fait des identifiants de caractéristiques, et le rang est la valeur):
[users_features] => Array
(
[1] => Array
(
[rank] => 9
)
[2] => Array
(
[rank] => 1
)
[3] => Array
(
[rank] => 3
)
(ce sera un tableau 10 de l'élément en ce moment, mais pourrait changer à l'avenir)
)
Un problème que je vois ici est que les produits qui ont toutes les caractéristiques seront toujours classés en haut de la liste - sauf si c'est OK. –
Vous avez besoin d'un moyen d'appliquer les classements aux fonctionnalités. Par exemple, si un produit ne correspond qu'à rank = 1 mais qu'un autre correspond à rank = 2 et 3, lequel est choisi? –
@EricPetroelje c'est correct si tous les produits ayant toutes les caractéristiques se classent en haut. – HipN