Fonction de recherche complexe : créer des packs d'items
Bonjour à tous,
Je suis en train de réfléchir à la méthode pour faire une recherche plutôt complexe en base de données (du moins c'est mon avis :mrgreen:) et je bloque un peu sur la manière d'implémenter la requête et le code PHP qui va derrière.
la recherche que je voudrais faire est la suivante :
l'utilisateur entre les items qu'il a et le système doit lui renvoyer les packs qu'il peut faire avec, l'idéal serait de pouvoir trouver également les packs qui sont presque complets (presque complet = 1 item manquant).
Je vais mettre un exemple qui sera à mon avis plus parlant.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| == table packs ==
+----+-----------+
| id | nom |
+----+-----------+
| 1 | premier |
| 2 | deuxième |
| 3 | troisième |
+----+-----------+
== table pack_content ==
+---------+-------+
| id_pack | item |
+---------+-------+
| 1 | item1 |
| 1 | item2 |
| 1 | item3 |
| 1 | item4 |
| 2 | item2 |
| 2 | item5 |
| 3 | item1 |
| 3 | item3 |
| 3 | item5 |
| 3 | item6 |
+---------+-------+ |
Admettons que l'utilisateur rentre "item1, item2, item4, item5"
le système devrait retourner le pack 2 qui est complet (item2 et item5) et le pack 1 qui est presque complet (manque uniquement item3)
J'avoue que je ne trouve pas vraiment comment comment coder cette fonction...
j'ai pensé un moment à faire la chose suivante mais ça me semble lourd...
Code:
1 2 3 4 5 6 7 8 9 10 11
| $useritems = getUserInput();
$full = [];
$partial = [];
foreach ($packs as $pack) {
$n = count($pack);
foreach ($pack as $item) {
if (in_array($item, $useritems)) $n--;
}
if ($n == 1) $partial[] = $item;
if ($n == 0) $full[] = $item;
} |
Est-ce que ça ne serait pas possible de limiter les résultats côté mysql ?
merci pour vos réponses :)