Afficher une table en fonction d'une autre?

Eléphant du PHP | 218 Messages

06 oct. 2010, 18:04

Bonjour, j'ai dans ma base de donnée une table "categories" avec un champs "theme" contenant plusieur articles d'une table appellé "articles" enregistré à partir de leur "id" sous la forme: 2[sep]4[sep]5[sep]8[sep]12[sep]22... [sep] indiquant la séparation.

Je souhaiterais pouvoir afficher les articles de la table "articles" lorsque leur id est présent dans le champ "theme" de la table "categories" ???
Pouvez-vous m'aider svp :mrgreen:

<?php
// Requète sql
$reponse = $bdd->query("
						SELECT id, theme, articles
						FROM categories
						WHERE id = 1
						");
$categories = $reponse->fetch(PDO::FETCH_ASSOC);

					


$array_articles = explode('[sep]', $categories['articles']);



	




$reponse = $bdd->prepare("
						SELECT id, titre, ancien_prix, prix, image,	keywords, nb_de_ventes
						FROM articles
						WHERE id = :id
						ORDER BY nb_de_ventes
						");
$reponse->execute(array(
						'id' => $array_articles
						));
		$reponse->setFetchMode(PDO::FETCH_ASSOC);

while( $articles = $reponse->fetch() )
{
echo $articles['titre'];
}
Cadeaux personnalisés pour toute la famille :
https://cadeauxplaisir.com/

ViPHP
ViPHP | 5462 Messages

06 oct. 2010, 18:28

fallait faire une table de correspondance les bases de données c'est fait pour :wink:

Eléphant du PHP | 218 Messages

06 oct. 2010, 20:20

hum, jcomprend pas bien sque tu veu dire? Un tit exemple? :P
Cadeaux personnalisés pour toute la famille :
https://cadeauxplaisir.com/

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 oct. 2010, 22:33

En fait, plutôt qu'un champ dans lequel tu concatènes tes identifiants, le mieux lorsque tu as une association 1::N (c'est à dire, lorsque à un élément d'une table peuvent être associés plusieurs éléments d'une autre table), c'est de faire une table intermédiaire qui contient deux champs : id_article et id_categorie. Pour chaque article, tu peux ainsi lui associer une ou plusieurs catégories en remplissant cette table.

Cette façon de procéder te permet de faire facilement des jointures entre tes 3 tables (une seule requête qui va interroger les 3 tables), pour savoir facilement quels articles appartiennent à une catégorie donnée, ou à quelles catégories appartient un article.

(Il est également plus facile ainsi de mettre à jour tes données : pour retirer un id, tu supprimes l'enregistrement correspondant et tu n'as pas besoin de reconstruire ta chaîne d'id à chaque fois)

Tu peux également y parvenir avec ta façon de faire en utilisant l'instruction sql LIKE, qui te permet de chercher des ressemblances dans une chaine. Tu peux ainsi faire une requête avec la condition " WHERE theme LIKE '%[sep]12[sep]%' " pour retrouver les enregistrements qui contiennent la chaîne [sep]12[sep] :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...