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) 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.
Admettons que l'utilisateur rentre "item1, item2, item4, item5"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 | +---------+-------+
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 PHP : Sélectionner tout - Visualiser dans une fenêtre à part
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![]()
Partager