Aller au contenu

Afficher les produits des sous catégories


Sujets conseillés

Posté

Bonjour,

j'ai des catégories qui ne contiennent que des sous-categories (pas de produits).

Lorquon est dans une catégorie mère, je souhaiterais afficher 10 produits aléatoirs issus des sous catégories.

C'est un casse tête pour moi, pouvez vous me guider ?

J'ai une table produits (avec id_produit) une table produit (avec id_cat, id_parent) et une table categorie_produits (avec id_produit, id_cat)

merce d'avance.

Posté

Relativement simple,

j'ai supposé que ta table produit est en fait categorie non??

Et dans la requete la valeur 2 correspond à la valeur de la categorie parente

SELECT 
`produits`.`id_produit`

FROM
`produits` ,
`categorie_produits` ,
`categories`

WHERE
`categorie_produits`.`id_produit` = `produits`.`id_produit` AND
`categorie_produits`.`id_cat` = `categories`.`id_cat` AND
`categories`.`id_parent` = '2'

LIMIT 0 , 9

Posté (modifié)
j'ai supposé que ta table produit est en fait categorie non??

oui en effet

Dans ce cas tu affiche seulement les produits presents dans les catégories filles (profondeur 1 par rapport a la catégorie mère)... En effet c assez simple.

Moi j'aimerais afficher 10 produits au hasard parmi tout les sous catégories, peut importe la profondeur de la hierarchie (categorie filles, petites filles, ....)

Je pense pas quon puisse faire ça seulement en requete SQL.

Malgré tout merci Dadou

Modifié par bovitch
Posté

Pour le aléatoire tu rajoutes ORDER BY Rand()

SELECT  
`produits`.`id_produit`

FROM
`produits` ,
`categorie_produits` ,
`categories`

WHERE
`categorie_produits`.`id_produit` = `produits`.`id_produit` AND
`categorie_produits`.`id_cat` = `categories`.`id_cat` AND
`categories`.`id_parent` = '2'

ORDER BY Rand()

LIMIT 0 , 9

Pour la récursivité c'est plus chaud Mysql ne le supporte pas à l'heure actuelle

Posté
Pour la récursivité c'est plus chaud Mysql ne le supporte pas à l'heure actuelle

oui sous Mysql c'est un casse tête alors que sous Oracle cette action semble très simple.

Et en melant le PHP, ça ne rend pas la tâche plus facile ? c pas possible de faire une boucle en PHP : tant quil y a des sous catégorie .... (ça parait simple quand je l'ecris :-) )

En tout cas merci.

Posté

effectivement sous Oracle, tu peux parcourir ta base sous forme d'arbre.

sinon, tu as pl-sql pour les traitements.

Du côté de Mysql, ça n'existe pas encore.

Par contre un assemblage PHP / Mysql est possible

ça fait un super exercice d'algorithmie à mes BTS :D

Posté

Le problème c'est que potentiellement tu peux le faire via php, mais tu devras sortir de la base tous les résultats au lieu des 10 que tu a besoin, tu va donc alourdir le script

Posté (modifié)

J'ai une solution propre, mais qui necessite que tu modifie un peut la structure de ta base : il faut utiliser la "Représentation intervallaire des arborescense "comme expliqué ici au chapitre 2 : http://sql.developpez.com/arborescence/ cela permet de garder des bonnes perfs au niveau du traitement de la base de données

Modifié par Dadou
Posté (modifié)

Tu ne peux pas créer un champs dans le quel tu enregistres tous les noeuds ?

[edit]je retire, car ça n'indique toujours pas si un enfant n'a pas lui-même des enfants[/edit]

La représentation intervallaire est séduisante, mais les opérations de mises à jour alourdissent le système.

(il faut les traduire en PHP)

La technique privilégie les accès en lecture (parcours de l'arbre).

Comme dans certains index de BDD, il ne vaut pas mieux d'avoir des intervalles plus larges avec des espaces vides ?

cela permet de ne modifier qu'une partie de l'arbre lors d'une insertion . mise à jour

[edit]ça ne marche pas non plus, car dans ce cas, on n'a plus la possiblité d'avoir toutes les feuilles d'un coup[/edit]

Modifié par pluriels
Posté (modifié)

Tu peux le faire en deux étapes :

function rand_cat($id)
{
$sql="SELECT id,parent_cat FROM categorie WHERE parent_cat='$id' order by rand()";
$rt=mysql_query($sql);
while ($data= mysql_fetch_array($rt))
{
$sql1="SELECT * FROM produit where cat='$data[id]' order by rand() limit 0,1"; // 1 produit par sous cat
$rt1=mysql_query($sql1);
$dataprod= mysql_fetch_array($rt1);
rand_cat($data['id']); // recursif
}
}
//depart mentionne parent_cat
rand_cat($depart);

Voilà le principe maintenant il y'a d'autres façon pour y'arriver

Modifié par smile

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...