IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Fonction de recherche complexe : créer des packs d'items


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Avatar de crozet.magenta
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 208
    Points : 374
    Points
    374
    Par défaut 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 ) 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
    n'oubliez pas de voter si le message vous a aidé


  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    On va déjà essayer de comprendre clairement ce que tu veux et voir si on est cohérents dans ta db.

    Déja , la table "table pack_content", me semble bizare car ta clé id_pack n'est pas unique, a moins que celle-ci une fk (mais tu l'annonces pas comme telle).

    Ensuite, si je prend en compte que c'est une fk et que je te comprends:

    Tu dis pack 2 complet, car j'ai l'item 2 et 5 en id_pack (si j'ai compris hein).
    Donc dans ce cas pack 1 est incomplet car il manque le item5 et pas 3 comme tu annonces, suis-je juste dans ce que j'énonce ?

  3. #3
    Membre averti
    Avatar de crozet.magenta
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 208
    Points : 374
    Points
    374
    Par défaut
    Bonjour,
    mon exemple n'est effectivement pas trop clair après relecture, j'ai voulu trop simplifier

    pour la BDD, en gros, il y a une table packs qui contient entre autres le nom du pack, une table items (que je n'avais pas représentée) qui contient entre autres le nom de l'item et une table de liaison pack_content qui permet la relation many to many entre pack et item.
    on a donc des packs qui sont composés de 1 à n items et des items peuvent être affectés à 1 à n packs
    Nom : Capture du 2015-12-01 11:47:11.png
Affichages : 62
Taille : 8,2 Ko<-- schéma de la BDD

    mon appli doit répondre au scénario suivant :
    l'utilisateur arrive avec en sa possession une liste d'items, il rentre la liste dans l'appli, l'appli lui renvoie les packs complets qu'il peut faire avec ses items.
    -> le plus serait également de pouvoir renvoyer également les packs presque complets (manque 1 item)

    pour un exemple plus concret, je prends par exemple un fleuriste :
    les packs correspondent aux bouquets, les items aux fleurs (en gras les packs, en souligné les items)
    le bouquet A contient des roses, des marguerites, des hortensias
    le bouquet B contient des marguerites, des lilas, des géraniums
    le bouquet C contient des marguerites, des hortensias

    le fleuriste a en sa possession des marguerites et des hortensias et des tulipes, il rentre la liste dans son application qui lui dit : «avec vos fleurs, vous pouvez préparer le bouquet C (marguerites et hortensias).»
    avec la fonctionnalité +, il renvoie également «Il ne vous manque que des roses pour faire le bouquet A»


    j'espère que c'est un peu plus clair
    n'oubliez pas de voter si le message vous a aidé


  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    C'est difficile comme ça de tête, tu as un jeu de données avec les exemples de fleuristes ?

  5. #5
    Membre averti
    Avatar de crozet.magenta
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 208
    Points : 374
    Points
    374
    Par défaut
    Oublions la fonctionnalité des packs incomplets, ça complique tout pour pas grand chose.

    je ne peux malheureusement pas donner le jeu de données réel mais en restant sur l'exemple du fleuriste, le contenu de la BDD pourrait ressembler à ca :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    table item
    +----+-------------+
    | ID |    NAME     |
    +----+-------------+
    | 1  | hortensias  |
    | 2  | tulipes     |
    | 3  | marguerites |
    | 4  | lilas       |
    | 5  | roses       |
    | 6  | géraniums   |
    +----+-------------+
     
    table pack
    +----+----------------------+
    | ID |         NAME         |
    +----+----------------------+
    | 1  | bouquet de printemps |
    | 2  | bouquet de noel      |
    | 3  | bouquet magnifique   |
    +----+----------------------+
     
    table pack_content
    +---------+---------+
    | ITEM_ID | PACK_ID |
    +---------+---------+
    | 1       | 1       |
    | 2       | 1       |
    | 4       | 1       |
    | 5       | 1       |
    | 2       | 2       |
    | 3       | 2       |
    | 5       | 2       |
    | 1       | 3       |
    | 2       | 3       |
    | 3       | 3       |
    | 6       | 3       |
    +---------+---------+
    le fleuriste a reçu un paquet de fleurs en vrac, il sait quel type de fleurs il a (le nombre n'est pas important, je n'ai pas à le gérer) mais il ne connait pas les bouquets qu'il peut faire avec. il rentre donc sur l'appli les variétés de fleurs qu'il a en stock et le systeme lui donne les bouquets qu'il peut faire avec.
    voici plusieurs cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    +----------------------------------------------------+---------------------------------------+
    |                 entrée utilisateur                 |        réponse de l application       |
    +----------------------------------------------------+---------------------------------------+
    | hortensias, tulipes, roses                         | aucun bouquet trouvé                  |
    | hortensias, marguerites, tulipes, roses, géraniums | bouquet de noel, bouquet magnifique   |
    | hortensias, tulipe, lilas, roses                   | bouquet de printemps                  |
    +----------------------------------------------------+---------------------------------------+
    n'oubliez pas de voter si le message vous a aidé


Discussions similaires

  1. Réponses: 4
    Dernier message: 02/03/2014, 16h29
  2. Recherche d'un logiciel pour créer des algorithmes
    Par Seb003 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 02/10/2005, 17h46
  3. Travailler / Créer des objets complexes
    Par Ekinoks dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/08/2005, 14h38
  4. Créer des fonctions au sein d'un script
    Par mat.M dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/03/2004, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo