Bonjour à tous,

Dans le cade d'un nouveau projet de comparateur de shopping je dois me pencher sur le tri des produits.

Je cherche une méthodologie pour trier environ 100 000 produits d'une centaine de marchands,

A savoir que je cherche quelque chose de plus poussé qu"un simple rand(),

J'aimerais faire un tri en fonction de conditions poussées :

  • Ne pas afficher 2 fois de suites des produits du même marchand
  • Afficher en priorité les produits qui ont déjà eu des clics
  • Afficher en priorité les produits des marchands qui paye plus chère le CPC
    ...

ce n'est qu'un exemple, mais à quel niveau traiter l'algo de tri SQL ou par le PHP ?
et comment mettre en place un algorithme de ce type pour bien mélanger les produits ?

Merci pour vos lumières.

8 réponses


Bonjour,

quel est l'ordre de priorité des conditions ?

la 2 et la 3 peuvent entrer en conflit

Comme ça, dans un premier temps j'irai à la bourrin...
On récupère tout, on utilise un sort php, on lui file la callback permettant de trier 2 objet

On fait passer des bench..

On regarde les résultats :)

On pleur :(

Lidee est interressante, je pense qu'effectivement il n'y a pas de reponse absolue a ta question. Faudrai voir la structure des tables pour voir si le faire en une requete est possible. Cependant la solution de Antho07 a lavantage davoir une plus forte "maintenabilité" je pense. Si tu passe par sql le jour a tu changes de priorité tu vas pleurer.
Il faut faire des phases de test

Bonjour
L'ennui c'est que j'ai fait passé des benchs et le résultat est catastrophique sur plus de 100 000 produits si l'on applique un tri naïf .
Avant tout de chose, il faut préciser le besoin , la volumétrie, les contraintes de temps ? (quand auront lieu ces comparaisons? des scripts qui passent de temps en temps, à chaque requête?? etc..)

As-t-on vraiment besoin d'effectuer le tri sur les 100 000 produits? Ou des filtrages plus efficaces peuvent avoir lieu en amont?

Il faut être parfaitement clair sur les besoins, la capacité d'évolutions futures, l'administration de ce filtrage etc...

Donne un poids à tes objets en leurs attribuant des points. Tu ne peux pas tout faire en une requête.

CendFr
Auteur

Hello, Merci pour le retour,

1er point bloquant, comment alterner le résultat SQL par nombre de marchands.

ex de résultat d'un site d'annonce Immo :

Marchand A Resultat 1
Marchand B Resultat 1
Marchand C Resultat 1
Marchand A Resultat 2
Marchand B Resultat 2
Marchand C Resultat 2
...

le faire en php me semble lourd...

et oui partons sur un cas extreme de traffic.

Merci

Qu'est ce que resultat ?

CendFr
Auteur

Voici un exemple plus schématisé
Dans une table, j'ai par exemple :

+------+--------+
| id | ville |
+------+--------+
| 1 | Paris |
| 2 | Paris |
| 3 | Paris |
| 4 | Lyon |
| 5 | Lyon |
| 6 | Rennes |
| 7 | Rennes |
+------+--------+

et je veux trier la colonne ville pour avoir un résultats "alterné" :

+------+--------+
| id | ville |
+------+--------+
| 1 | Paris |
| 4 | Lyon |
| 6 | Rennes |
| 2 | Paris |
| 5 | Lyon |
| 7 | Rennes |
| 3 | Paris |
+------+--------+

une idée ?