Sign in to follow this  
Followers 0

Création d'une page "Meilleures Ventes"

51 posts in this topic

Posted · Report post

Bonjour,

Je découvre Peel Shopping et trouve le module vraiment excellent. Seulement maintenant, j'aimerais créer une page "Meilleures Ventes" qui affichera les produits les plus vendus.

Seul problème je ne vois pas trop comment m'y prendre...

J'aimerais me baser sur le table "peel_commandes_articles" et que php me retourne par ordre décroissant les 10 produits les plus vendus.

Je pense qu'il faudrait dire à SQL de comptabiliser toutes les occurences du champ "produit_id" et de les classer par DESC... Mais comment ?

Je n'ai vraiment pas assez de connaissances en SQL pour trouver la ligne de code adéquate... :)

Ce serait un truc du style :

$sql = "SELECT (je ne sais pas :/) FROM peel_commandes_produits ORDER BY (je ne sais pas :/) DESC LIMIT 10";

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

Je pensais aussi à integrer des variables pour compter, mais je bloque...Je bloque énormément...

Quelqu'un peut-il m'aider s'il arrive à comprendre mon problème ? Merci d'avance !

Bonne journée !

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

regarde ca et modifie là avec ce que tu veux comme information :)

SELECT count(*) as count, produit_id FROM `peel_commandes_articles` group by produit_id order by count desc

Willy

Share this post


: post
Share on other sites

Posted · Report post

Merci pour cette réponse extrêmement rapide Willy :)

C'est exactement ce que je cherchais. Je n'ai plus qu'à l'adapter à ma page !

Merci encore

Share this post


: post
Share on other sites

Posted · Report post

Pas de soucis, n'hésitez pas si vous avez des pb avec ce code ou pour l'intégration dans votre page.

Mais normalement là c'est bon, vous avez le comptage et l'id du produit, avec ca vous pouvez chercher les autres infoes sur le produit grace à une auter requete SQL.

Willy

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

Pouvez vous m'aiguiller, cela m'intéresse aussi

Merci

/------------------------- voila mon bout de code -------------------/

<?

include("../configuration.inc.php");

if (!isset($_GET['catid'])) { $catid = 0;} else {$catid = intval($_GET['catid']);}

$DOC_TITLE = "[ peel ]";

include("$repertoire_modele/haut.php");

echo " > Nouveautés<div class=\"petit\">".affiche_arbre_categorie($catid)." </div>";

echo "<div class=\"entete\"><img src=\"images/entete_livre.jpg\" title=\"\" alt=\"\"/ align=\"absmiddle\">meilleures ventes</div>";

$nb = 30; //nombre d'enregistrement par page

if (!isset($_GET['start'])) {$start=0;} else {$start = intval($_REQUEST['start']);}

// Récupération et affichage des données

$sql="SELECT count(*) as count, produit_id FROM `peel_commandes_articles` group by produit_id order by count desc";

$result=mysql_query($sql) or DIE('Une erreur de connexion à la base s est produite ' . __LINE__ . '.<p>' . MYSQL_ERROR());

if (mysql_num_rows($result) == 0) {

echo "<div class=\"texte\">".NO_INDEX_PRODUCT."</div>";

} else {

echo "<table border=\"0\" cellpadding=\"1\" cellspacing=\"0\" width=\"100%\">";

$nb_cellules = mysql_num_rows($result);

$nb_colonnes = 2;

$j = 0;

while($prod=mysql_fetch_array($result))

{

if ( $j % $nb_colonnes == 0 ) {

echo "<tr>";

}

if($j % $nb_colonnes !=0 OR $j % $nb_colonnes == 0 ) {

echo "<td class=\"normal\" width=\"33%\">";

template_index_produit($prod['id'], $where = "AND p.on_new = '1'" , $form = "new");

}

echo "</td>";

$j++;

if ( $j % $nb_colonnes == 0 OR $j == $nb_cellules ) {

echo "</tr>";

}

}

echo "<td align=\"center\" class=\"normal\" colspan=\"2\">";

//Boutons précédent et suivant

if($start)

{print("<a class=petit href=\"index.php?catid=".$catid."&start=".($start-$nb)."\">Page précédente</a>");}

$result=mysql_query("SELECT COUNT(*) FROM peel_produits p, peel_produits_categories pc WHERE p.id = pc.produit_id AND pc.categorie_id = $catid AND p.etat = 1");

$row=mysql_fetch_row($result);

if($row[0]>($start+$nb))

{

if($start)

{print(" / ");}

print("<a class=petit href=\"index.php?catid=".$catid."&start=".($start+$nb)."\">Page suivante</a>");

}

print("<br />");

//Affichage des pages

if($row[0]>$nb) {// le nombre d'enreg. est > au nb de lignes d'affichage ?

print("Page : ");

for($index=0;($index*$nb)<$row[0];$index++) // oui alors on affiche les numéros de pages

{

?>

<b><a class="petit" href="<?=$_SERVER['PHP_SELF']."?catid=".$catid."&start=".$index*$nb; ?>"><? echo $index+1; ?></a></b>

<?

}

}

echo "</td></tr></table>";

}

include("$repertoire_modele/bas.php");

?>

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

qu'est ce qui en va pas sur votre page ?

Un truc bizarre:

template_index_produit($prod['id'], $where = "AND p.on_new = '1'" , $form = "new");
Pourquoi mettre
$where = "AND p.on_new = '1'" , $form = "new"

???

Willy

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

je n'ai tjours pas résolu ce problème :)

Merci

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

le soucis c'est que vous ne dites pas quel est le probleme :) :P

Dites en plus qu'on comprenne.

Willy

Share this post


: post
Share on other sites

Posted · Report post

Oui pardonnez moi ...

voici les erreurs que j'ai

Notice: Undefined index: id in c:\program files\easyphp1-8\www\1_gisserot\achat\meilleures-ventes.php on line 52

Warning: Missing argument 2 for template_index_produit() in c:\program files\easyphp1-8\www\1_gisserot\modeles\default\template.php on line 504

Warning: Missing argument 3 for template_index_produit() in c:\program files\easyphp1-8\www\1_gisserot\modeles\default\template.php on line 504

Notice: strtotime(): Called with empty time parameter in c:\program files\easyphp1-8\www\1_gisserot\modeles\default\template.php on line 538

Notice: strtotime(): Called with empty time parameter in c:\program files\easyphp1-8\www\1_gisserot\modeles\default\template.php on line 538

Notice: strtotime(): Called with empty time parameter in c:\program files\easyphp1-8\www\1_gisserot\modeles\default\template.php on line 538

Notice: strtotime(): Called with empty time parameter in c:\program files\easyphp1-8\www\1_gisserot\modeles\default\template.php on line 538

Notice: strtotime(): Called with empty time parameter in c:\program files\easyphp1-8\www\1_gisserot\modeles\default\template.php on line 538

Notice: strtotime(): Called with empty time parameter in c:\program files\easyphp1-8\www\1_gisserot\modeles\default\template.php on line 538

en gros il ne trouve pas les meilleures ventes....

Je ne suis pas un expert en php :)

<?

include("../configuration.inc.php");

if (!isset($_GET['catid'])) { $catid = 0;} else {$catid = intval($_GET['catid']);}

$DOC_TITLE = "[ peel ]";

include("$repertoire_modele/haut.php");

echo " > Nouveautés<div class=\"petit\">".affiche_arbre_categorie($catid)." </div>";

echo "<div class=\"entete\"><img src=\"images/entete_livre.jpg\" title=\"Nouveauté livre

\" alt=\"votre nouveauté

\"/ align=\"absmiddle\">meilleures ventes</div>";

$nb = 30; //nombre d'enregistrement par page

if (!isset($_GET['start'])) {$start=0;} else {$start = intval($_REQUEST['start']);}

// Récupération et affichage des données

$sql="SELECT count(*) as count, produit_id FROM `peel_commandes_articles` group by produit_id order by count desc";

$result=mysql_query($sql) or DIE('Une erreur de connexion à la base s est produite ' . __LINE__ . '.<p>' . MYSQL_ERROR());

if (mysql_num_rows($result) == 0) {

echo "<div class=\"texte\">".NO_INDEX_PRODUCT."</div>";

} else {

echo "<table border=\"0\" cellpadding=\"1\" cellspacing=\"0\" width=\"100%\">";

$nb_cellules = mysql_num_rows($result);

$nb_colonnes = 2;

$j = 0;

while($prod=mysql_fetch_array($result))

{

if ( $j % $nb_colonnes == 0 ) {

echo "<tr>";

}

if($j % $nb_colonnes !=0 OR $j % $nb_colonnes == 0 ) {

echo "<td class=\"normal\" width=\"33%\">";

template_index_produit($prod['id']);

}

echo "</td>";

$j++;

if ( $j % $nb_colonnes == 0 OR $j == $nb_cellules ) {

echo "</tr>";

}

}

echo "<td align=\"center\" class=\"normal\" colspan=\"2\">";

//Boutons précédent et suivant

if($start)

{print("<a class=petit href=\"index.php?catid=".$catid."&start=".($start-$nb)."\">Page précédente</a>");}

$result=mysql_query("SELECT COUNT(*) FROM peel_produits p, peel_produits_categories pc WHERE p.id = pc.produit_id AND pc.categorie_id = $catid AND p.etat = 1");

$row=mysql_fetch_row($result);

if($row[0]>($start+$nb))

{

if($start)

{print(" / ");}

print("<a class=petit href=\"index.php?catid=".$catid."&start=".($start+$nb)."\">Page suivante</a>");

}

print("<br />");

//Affichage des pages

if($row[0]>$nb) {// le nombre d'enreg. est > au nb de lignes d'affichage ?

print("Page : ");

for($index=0;($index*$nb)<$row[0];$index++) // oui alors on affiche les numéros de pages

{

?>

<b><a class="petit" href="<?=$_SERVER['PHP_SELF']."?catid=".$catid."&start=".$index*$nb; ?>"><? echo $index+1; ?></a></b>

<?

}

}

echo "</td></tr></table>";

}

include("$repertoire_modele/bas.php");

?>

Share this post


: post
Share on other sites

Posted · Report post

Alors:

ligne 52 remplacez :

template_index_produit($prod['id']);
Par:
template_index_produit($prod['produit_id'],$where = " ", $form = "special");

En effet dans ta requete sql tu ramennes le produit_id et non id et ensuite il te manquait 2 parametres dans l'appel à ta fonction :)

Dis nous si c'est OK.

Willy

Share this post


: post
Share on other sites

Posted · Report post

Merci

Share this post


: post
Share on other sites

Posted · Report post

Ca marche ?

Willy

Share this post


: post
Share on other sites

Posted · Report post

Oui superbe ....

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

Je reviens à la charge avec cette page !

J'ai tenté moult fois de réussir à formuler la bonne requête SQL en vain. Je pensais avec ce que vous m'avez donné Willy, pouvoir faire une seule et même requête avec LEFT JOIN... Mais je me trompe sans cesse dans la syntaxe.

Pouvez vous m'aider à corriger ce ptit bout de code ?

Le voici :

$sql = "SELECT 

			  oi.count (*) as count

			, p.id 

			, p.millesime

			, p.nom

			, p.prix

			, p.couleur

		FROM peel_commandes_articles oi 

			LEFT JOIN peel_produits p ON (oi.produit_id = p.id)

		GROUP BY produit_id 

		ORDER BY count 

		DESC LIMIT 10";

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());


//Début de boucle

while( $sortie = mysql_fetch_array($req))


{ 

//Affichage de chaque ligne pour chaque produit

echo "<tr bgcolor='"; if($o==1) { echo "#ECECEC"; $o++; } else { echo "#FFFFFF"; $o=1; }

echo "'>


	<th class=\"catalogue\">$sortie[millesime]</th>

	<th class=\"catalogue\"><font color=#993333><b>";

	?>


<a href="<?echo $wwwroot?>/achat/produit_details.php?id=<?=$sortie['id'] ?>&catid=<?=$catid?>"><?echo stripslashes($sortie['nom']) ?>


<?

echo "</a></b></font></th>

	<th class=\"catalogue\">$sortie[aoc]</th>

	<th class=\"catalogue\"><b>$sortie[couleur]</th>

	<th class=\"catalogue\">$sortie[prix] €</th>


</tr>"; 


}

Le problème est donc dans la requête, qui est archi fausse....

Share this post


: post
Share on other sites

Posted · Report post

juste un soucis, je viens de télécharger la derniere version de peel shopping pour vérifier...

Il n'y a pas de dossier template dans modeles.

Ou as tu vu ce dossier dans la version shopping (je rapelle à mon lecteur que nous sommes dans la partie shopping)

j'ai manqué une étape?

Share this post


: post
Share on other sites

Posted · Report post

Oui, comme je travaille sur Shopping, le template n'est pas présent et c'est pourquoi, ne pouvant pas appliquer la solution de noya_m, j'ai tenté de la faire à ma sauce...

Et je bloque.

Share this post


: post
Share on other sites

Posted · Report post

sur quoi bloque tu, explique moi ce le souci, je pense que je peux aider.. :)-

Share this post


: post
Share on other sites

Posted · Report post

Sur ce que j'ai expliqué juste au dessus de ton post :)

Sur la requête SQL pour afficher les meilleures ventes... J'ai tenté d'en faire une à partir de ce que Willy m'a indiqué, mais erreur de syntaxe, et mon niveau est bien trop bas pour me dépatouiller tout seul.

Voilà la requête :

$sql = "SELECT

			  oi.count (*) as count

			, p.id

			, p.millesime

			, p.nom

			, p.prix

			, p.couleur

		FROM peel_commandes_articles oi

			LEFT JOIN peel_produits p ON (oi.produit_id = p.id)

		GROUP BY produit_id

		ORDER BY count

		DESC LIMIT 10";

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

Share this post


: post
Share on other sites

Posted · Report post

c'est tout simple, tu ne gere ni la couleur, ni le millesime dans ta table produit pour une version shopping...

$sql = "SELECT

			  oi.count (*) as count

			, p.id

			, p.nom

			, p.prix


		FROM peel_commandes_articles oi

			LEFT JOIN peel_produits p ON (oi.produit_id = p.id)

		GROUP BY oi.produit_id

		ORDER BY count

		DESC LIMIT 10";

Share this post


: post
Share on other sites

Posted · Report post

[edit] j'avais dit une connerie :)

Willy

Share this post


: post
Share on other sites

Posted · Report post

à vrai dire je n'en sais rien, c'etait l'ancienne facon de programmer, je n'ai rien contre, je la lis et comprend, j'ai juste modifié ce qui etait proposé.

Share this post


: post
Share on other sites

Posted · Report post

Ben je n'arrive pas à créer une seconde requête qui recoupe la première... Dans ma tête un LEFT JOIN était plus clair. Après je peux évidement me tromper, et d'ailleurs c'est ce que j'ai fait ! :)

En tout cas, ca ne marche pas puisqu'il me renvoit cette erreur, à chaque fois :

"Erreur SQL !

SELECT oi.count (*) as count , p.id , p.nom , p.prix FROM peel_commandes_articles oi LEFT JOIN peel_produits p ON (oi.produit_id = p.id) GROUP BY oi.produit_id ORDER BY count DESC LIMIT 10

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(*) as count , p.id , p.nom"

Share this post


: post
Share on other sites

Posted · Report post

cela marche t'il ?

En effet

$sql = "SELECT

			  oi.count (*) as count

			, p.id

			, p.nom

			, p.prix

		FROM peel_commandes_articles oi, peel_produits p 

		WHERE oi.produit_id = p.id

		GROUP BY produit_id

		ORDER BY count

		DESC LIMIT 10";

Marcherait aussi bien à mon avis

Share this post


: post
Share on other sites

Posted · Report post

Toujours la même erreur (voir plus haut).

Pour récapituler, je voudrais qu'il me compte dans la table peel_commande_articles le nombre d'occurences de chaque produit (afin de compter le nombre de ventes) puis de les classer par ordre decroissant.

Seulement je voudrais aussi afficher quelques autres informations contenus dans la table peel_produits. Il me faudrait donc, à partir de la premiere requete (qu'avait fourni Willy en début de topic) pour retrouver les infos du produit dans la table peel_produits.

D'où l'espèce de test avec left join (ou sans ^^)...

Share this post


: post
Share on other sites

Posted · Report post

Et ca ?

$sql = "SELECT

			  oi.count (*) as count

			, p.id

			, p.nom

			, p.prix

		FROM peel_commandes_articles oi, peel_produits p 

		WHERE oi.produit_id = p.id

		GROUP BY oi.produit_id, p.id

		ORDER BY count

		DESC LIMIT 10";

Share this post


: post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

Twitter Advisto ecommerce

Facebook PEEL Shopping