Création d'une page "Meilleures Ventes"

51 messages dans ce sujet

Posté(e) · Signaler ce message

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 !

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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");

?>

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

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

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

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

Dites en plus qu'on comprenne.

Willy

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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");

?>

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Ca marche ?

Willy

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Oui superbe ....

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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....

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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());

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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";

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

[edit] j'avais dit une connerie :)

Willy

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

à 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é.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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"

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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 ^^)...

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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";

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

Twitter Advisto ecommerce

Facebook PEEL Shopping