8795 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis en train de développer un formulaire de recherche pour un projet étudiant.
L'utilisateur coche des checkbox, à partir desquelles je cherche les personnes qui ont la (ou les) caractéristique(s) cochée(s).

Voici le HTML :
            <form name="searchFormCompetences" method="GET" action="traiteRecherche.php">
                <input type="hidden" name="type" value=3>
                <label for="competences">Par compétences :</label><br/>
                <?php
                    //récupération des fonctionnalités de la base
                    $request="select ID_FONCTIONNALITES, LIBELLE_FONCTIONNALITE from FONCTIONNALITES";
                    $result=mysql_query($request, $db);
                    
                    while($ligne=mysql_fetch_row($result)){
                        //Impression de la liste
                        print("<input type='checkbox' name='check_$ligne[0]' value='$ligne[0]'> $ligne[1] ");
                    }
                ?>
                <br/><input type="submit" value="OK">
            </form>


La liste des fonctionnalités étant dans la base de données et modifiable, je la récupère via PHP.

Et voici le PHP censé exploiter les résultats :

            if($leType==3){
                //recherche par compétences
                //récupère le nombre de compétences de la base
                $request4="select ID_FONCTIONNALITES from FONCTIONNALITES";
                $result4=mysql_query($request4, $db);
                $nb=mysql_num_rows($result4);
                //on récupère les id des développeurs qui ont chaque compétence
                $listeDVP=""
                for($i=1; $i<=$nb; $i++){
                    if (isset($_GET["check_$i"])) {
                        $request5="select ID_DEVELOPPEUR from MAITRISE where ID_FONCTIONNALITES='$i'";
                        $result5=mysql_query($request5, $db);
                        //comment faire ici ?
                    }
                }
            }


Je ne sais pas comment récupérer une liste d'id correspondants aux développeurs maîtrisant ces compétences, pour ensuite pouvoir afficher la liste de ces développeurs !

Merci d'avance pour votre aide Smiley smile
Bonjour,

Voilà une requête SQL de type blog représentant une recherche d'article en fonction de plusieurs mots clés. C'est exactement le même genre de cas que le tiens :
SELECT DISTINCT `a`.`id` FROM `article` AS `a` LEFT JOIN `article_tag` AS `at` ON `at`.`article_id` = `a`.`id` LEFT JOIN `tag` AS `t` ON `t`.`id` = `at`.`tag_id` WHERE `t`.`tag` IN ('tag1', 'tag2')

Cette requête retournera tous les articles qui on au moins l'un des tag recherché.

Dans ton exemple les valeurs des checkbox correspondent aux ids des compétences (tags dans mon exemple), tu peux donc t'arrêter à la première jointure.

SELECT DISTINCT `a`.`id` FROM `article` AS `a` LEFT JOIN `article_tag` AS `at` ON `at`.`article_id` = `a`.`id` WHERE `at`.`tag_id` IN ('1', '2')


Si tu souhaite retourner seulement les articles ayant strictement tous les tags alors la requête sera différente.
Modifié par moust (01 Jun 2012 - 15:23)
Merci, mais je dois avouer que je ne comprends pas bien...

A quoi correspondent les 'a', 'at', etc... ?
Et LEFT JOIN ?
Ce sont des alias défini par les clauses AS et qui permettent de simplifier l'écriture de la requête. Mais tu peux très bien t'en passer :
SELECT DISTINCT `article`.`id` FROM `article` LEFT JOIN `article_tag` ON `article_tag`.`article_id` = `article`.`id` WHERE `article_tag`.`tag_id` IN ('1', '2')


Quand à LEFT JOIN c'est une liaison entre la table "article" et la table "article_tag".
Si tu ne comprends pas alors je te conseille d'aller lire quelques articles de la doc de MySQL sur le sujet.
Modifié par moust (02 Jun 2012 - 11:37)
Ok merci Smiley smile

C'est à dire que je suis étudiant, donc sa ne fait pas bien longtemps que je connaît SQL et PHP ^^
Je vais regarder dans la doc et essayer de faire ainsi !
Modifié par ClementParis (02 Jun 2012 - 13:50)
J'ai cherché dans la documentation de MySQL, mais je sais pas dans quelle catégorie chercher...

Donc si quelqu'un pouvait m'expliquer comment faire ou me proposer une autre alternative, sa serait gentil, parce que là j'ai vraiment du mal Smiley smile

En gros la question c'est : comment effectuer une recherche dans une table SQL à partir de checkbox ?

Merci d'avance Smiley cligne