PHP Jointure de table, requête sql pour n'afficher qu'un seul résultat par correspondance.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : PHP Jointure de table, requête sql pour n'afficher qu'un seul résultat par correspondance.

Re: PHP Jointure de table, requête sql pour n'afficher qu'un seul résultat par correspondance.

par Ascla » 13 mars 2016, 19:38

Bonjour,
Je ne sais pas si j'ai bien compris le problème, mais tu souhaites mettre en place une requête qui aille chercher une donnée dans le résultat d'une autre requête ?
Si c'est bien cela, voici une structure simple :
$sql = "
    SELECT *
    FROM (      SELECT *
                FROM maTable
                INNER JOIN .....
                WHERE ....
         )
    WHERE id = '$idDuProdRecherche'
";

Re: PHP Jointure de table, requête sql pour n'afficher qu'un seul résultat par correspondance.

par supernova-orion » 10 mars 2016, 19:39

J'ai ajouté un champ type_cat_art dans articles_categories où je mets secondaire ou principale, ça me permet de filtrer comme cela, mais s'il y a une autre solution, je suis preneur !

PHP Jointure de table, requête sql pour n'afficher qu'un seul résultat par correspondance.

par supernova-orion » 09 mars 2016, 18:39

Salut,

Alors je vous explique mon souci.

Je développe une modification pour mon backoffice perso. Le client veut qu'un article ai plusieurs catégories et plusieurs sous catégories possibles.

Mes catégories 1 sont les régions de France et mes catégories 2 sont les activités.
Donc un magasin peut être dans plusieurs régions et aussi dans plusieurs activités


J'ai donc ma table "categories" où sont enregistrées les données des cat1 cat2 (mais pas besoin de vous expliquer cette table car je ne m'en sert pas dans l'exemple).

La table principale "articles" (je mets le minimum de champs pour être clair)

id, titre, texte

Et ma table "articles_categories" qui est jointe par l'id à celle des "articles"

id, idart, cat1, cat2,

(cat1 correspond à la catégorie 1 et cat2 à la catégorie 2. Exemple cat1: Région Paca, cat2:Fleuriste mais avec les id bien sûr)

Donc jusque là aucun souci, il me suffit de faire une jointure de "articles.id" à "categories.idart" puis de filtrer avec la recherche de catégories.

J'ai simulé cela dans mon exemple en rajoutant une recherche fixe avec $cat1_sel et $cat2_sel.
$table_art = "articles" ;
$table_categories = "categories" ;

$cat1_sel = "1";
$cat2_sel = "5";

$sql = "SELECT * FROM $table_art ";

$sql .= " INNER JOIN $table_categories ON $table_art.id = $table_categories.idart";
$sql .= " WHERE $table_categories.cat1_art = $cat1_sel";
$sql .= " AND $table_categories.cat2_art = $cat2_sel";
$sql.= " ORDER BY $table_art.id";


$req = mysqli_query($conn, $sql);
$res = mysqli_num_rows($req);



echo $res." Resultat(s)<br>";
if ($res != 0) {
while($data=mysqli_fetch_array($req)) {

echo $data["titre"]."<br>";


}
}
Donc ça marche très bien !

Cependant si je veux lister simplement les articles de la cat1
en supprimant
$sql .= " AND $table_categories.cat2_art = $cat2_sel";
Etant donné que mes articles on parfois une autre catégorie 2 associée, je vais me retrouver avec plusieurs résultats !


Alors ma question, comment n'avoir qu'un seul résultat en demandant d'afficher simplement si l'id de l'article est trouvé dans la jointure ?

C'est à dire un peu comme un IN_ARRAY Mais via une jointure et dans une requête SQL (obligatoirement pour que ce soit plus propre, facile à compter et à utiliser avec mes autres scripts).

Merci par avance,

J'espère que j'ai bien expliqué mon souci.