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.

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 |
+---------+-------+
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 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