Ont aussi acheté

23 messages dans ce sujet

Posté(e) · Signaler ce message

Bonjour,

Je voudrais avoir en dessous des Produits associés ou complémentaires un module Les clients ayant acheté cet article

ont également acheté les articles suivants :

A mon avis il faut adapté le code des Produits associés ou complémentaires et allé chercher les informations dans peel_utilisateurs_commandes et peel_commandes_articles

Si quelqu'un peut me donner des pistes pour mette en place ce module sur mon site se sera plutôt pas mal.

Merci d'avance

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Je voudrais avoir en dessous des Produits associés ou complémentaires un module Les clients ayant acheté cet article

ont également acheté les articles suivants :

A mon avis il faut adapté le code des Produits associés ou complémentaires et allé chercher les informations dans peel_utilisateurs_commandes et peel_commandes_articles

Si quelqu'un peut me donner des pistes pour mette en place ce module sur mon site se sera plutôt pas mal.

Merci d'avance

c'est vrai que c'est interressant sa !! ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Si quelqu'un pouvait m'aider a faire la requête pour aller chercher pour chaque produit dans la page produit_details.php les produits qui leur sont associé en fonction des commandes clients, pour avoir Les clients ayant cet article ont également achetés :

J'ai essayé de faire la requête mais j'y connais pas grand chose en sql :

$select = mysql_query("
SELECT
p.id,
p.nom_".$_SESSION['langue'].",
p.image1,
p.prix,
ca.commande_id
uc.utilisateur_id
FROM
peel_commandes_articles ca
,peel_utilisateurs_commandes uc
,peel_produits p
WHERE p.id = ca.commande_id
AND ca.commande_id = uc.utilisateur_id
AND uc.utilisateur_id = '".$prod['id']."'
")
or DIE('Une erreur de connexion &agrave; la base s est produite ' . __LINE__ . '.<p>' . MYSQL_ERROR());[/codebox]

Evidament ça ne marche pas j'ai un message d'erreur

Une erreur de connexion à la base s est produite 205.

Erreur de syntaxe près de '.utilisateur_id FROM peel_commandes_articles ca ,p' à la ligne 7

Je remercie d'avance tout ce qui pourront m'aider.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

ATTENTION lorsque tu lie deux tables, tu dois aller dans les correspondances.

Ca veut dire que tu lie l'id d'un produit dans produit avec l'id d'un produit dans la commande.

D'autre part la requete c'est

affiche moi tous les produits (distincts) commandés dans une commande contenant aussi le produit actuel.

Ya plus qu'à. Enfin, on s'en fiche de l'utilisateur, toi tu dois chercher la correspondance par rapport à l'id de la commande.

Une derniere petite chose. tu peux placer un LIMIT 6 à la fin de ta requete pour ne pas submerger ta page produit<.

atila

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Merci de faire avancer le schmilblick, j'ai donc modifier mon code sur tes conseil je n'est pas de message d'erreur par contre il n'y a rien qui s'affiche je te montre le code

echo "<br /><br />";

/* Charge les produits associ&eacute;s */

$select = mysql_query("
SELECT
p.id,
p.nom_".$_SESSION['langue'].",
p.image1,
p.prix,
ca.commande_id
FROM
peel_produits p
,peel_commandes_articles ca
WHERE p.id = ca.commande_id
AND ca.commande_id = '".$prod['id']."'
")
or DIE('Une erreur de connexion &agrave; la base s est produite ' . __LINE__ . '.<p>' . MYSQL_ERROR());

if (mysql_num_rows($select) > 0) {

$nb_cellules = mysql_num_rows($select);

$nb_colonnes = 2;

echo "<div class=\"entete\">".ASSOCIED_PRODUCT."</div><br />";

echo "<p><table align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"20\" width=\"100%\">";

$j = 0;

while ($ref = mysql_fetch_array($select)) {

if ( $j % $nb_colonnes == 0 ) { echo "<tr valign=top>"; }

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

// on affiche une cellule
if ( $j % $nb_colonnes == 0 OR $j == $nb_cellules ) { echo "<td class=\"normal\" width=\"50%\" align=\"center\">"; } else { echo "<td class=\"normal\" width=\"50%\" align=\"center\">"; }

if (!empty($ref['image1'])) { echo "<img src=$repertoire_upload/".$ref['image1']." width=\"100\"/><br />";}

echo "".stripslashes($ref['nom_'.$_SESSION['langue'].''])."<br />";

echo "<a class=\"normal\" href=achat/produit_details.php?qte=1&id=".$ref['id'].">".MORE."</a>";

}
echo "</td>";

$j++;

if ( $j % $nb_colonnes == 0 OR $j == $nb_cellules ) {
echo "</tr>";
}

}
echo "</table></p>";
}[/codebox]

A mon avis il faut qu'il récupére la référence du produit ce qui n'est pas le cas ici, qu'est -ce que vous en pensez?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Essaye avec ca; mais je crois que cela ne passe pas du au lacunes de mysql dans les requetes imbriquées



$select = mysql_query("
SELECT
p.id,
p.nom_".$_SESSION['langue'].",
p.image1,
p.prix

FROM
peel_produits p
,peel_commandes_articles ca

WHERE p.id = ca.produit_id

AND ca.commande_id IN (

SELECT DISTINCT commande_id FROM peel_commandes_articles
WHERE produit_id= '".$prod['id']."')

")
or DIE('Une erreur de connexion &agrave; la base s est produite ' . __LINE__ . '.<p>' . MYSQL_ERROR());


[/codebox]

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Ah ce moment là tu essayera avec ceci


mysql_query("CREATE TEMPORARY TABLE tmptable ( commande_id int(11));");
mysql_query("INSERT INTO tmptable SELECT DISTINCT commande_id FROM peel_commandes_articles
WHERE produit_id= '".$prod['id']."';");


$query = "
SELECT
p.id,
p.nom_".$_SESSION['langue'].",
p.image1,
p.prix
FROM
peel_produits as p
,peel_commandes_articles as ca,
tmptable as TMP
WHERE p.id = ca.produit_id

AND ca.commande_id =TMP.commande_id;"

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

mysql_query("DROP TABLE tmptable");






[/codebox]

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Merci beaucoup sans toi j'y serai jamais arrivé voici le code qui marche c'est celui que tu donne en premier j'ai fixé une limit a 2 produit je remet ton code + ma petite modif pour la LIMIT

echo "<br /><br />";

/* Charge les produits associ&eacute;s */

$select = mysql_query("
SELECT
p.id,
p.nom_".$_SESSION['langue'].",
p.image1,
p.prix
FROM
peel_produits p
,peel_commandes_articles ca
WHERE p.id = ca.produit_id
AND ca.commande_id IN (
SELECT DISTINCT commande_id FROM peel_commandes_articles
WHERE produit_id= '".$prod['id']."')
LIMIT 2
")
or DIE('Une erreur de connexion &agrave; la base s est produite ' . __LINE__ . '.<p>' . MYSQL_ERROR());

if (mysql_num_rows($select) > 0) {

$nb_cellules = mysql_num_rows($select);

$nb_colonnes = 2;

echo "<div class=\"entete\">".ASSOCIED_PRODUCT."</div><br />";

echo "<p><table align=\"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"20\" width=\"100%\">";

$j = 0;

while ($ref = mysql_fetch_array($select)) {

if ( $j % $nb_colonnes == 0 ) { echo "<tr valign=top>"; }

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

// on affiche une cellule
if ( $j % $nb_colonnes == 0 OR $j == $nb_cellules ) { echo "<td class=\"normal\" width=\"50%\" align=\"center\">"; } else { echo "<td class=\"normal\" width=\"50%\" align=\"center\">"; }

if (!empty($ref['image1'])) { echo "<img src=$repertoire_upload/".$ref['image1']." width=\"100\"/><br />";}

echo "".stripslashes($ref['nom_'.$_SESSION['langue'].''])."<br />";

echo "<a class=\"normal\" href=achat/produit_details.php?qte=1&id=".$ref['id'].">".MORE."</a>";

}
echo "</td>";

$j++;

if ( $j % $nb_colonnes == 0 OR $j == $nb_cellules ) {
echo "</tr>";
}

}
echo "</table></p>";
}[/codebox]

Il y'a juste un petit soucis c'est que l'on retrouve parfois le même produit dans la description du produit et dans "Les clients ont également achetés"

Mais sinon c'est impeccable, un grand merci a toi.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

C'est bizarre ça marche bien en local avec easy php mais sur le serveur dédié 1and1 j'ai un message d'erreur.

Une erreur de connexion à la base s est produite 205.

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 'SELECT DISTINCT commande_id FROM peel_commandes_articles

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

faut mettre (commande_id)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour paulanna,

Tu peux m'en dire un peu plus ou il faut mettre (commande_id), pour que l'on est pas 2 fois le même produit associé dans la page du descriptif produit, par exemple pour ne pas avoir le detail produit et le même produit en dessous lui etant associé dans "les client ont également acheté".

Ton aide sera la bienvenue.

Merci d'avance.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

dans la fiche détails du produit : si le produit que tu consultes fait également parti des produits associés c'est que peut etre tu l'as tout simplement associé dans la fichie produit dans le back office.

pour la requete essaie :

SELECT DISTINCT( commande_id) FROM peel_commandes_articles

à la place de

SELECT DISTINCT commande_id FROM peel_commandes_articles

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour, je vous met le code de la requête que j'ai sur un site en oscommerce pour "les clients ont également acheté" on peut essayer de l'adapter a Peel

if (isset($HTTP_GET_VARS['products_id'])) {
$orders_query = tep_db_query("select p.products_id, p.products_image from " . TABLE_ORDERS_PRODUCTS . " opa, " . TABLE_ORDERS_PRODUCTS . " opb, " . TABLE_ORDERS . " o, " . TABLE_PRODUCTS . " p where opa.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and opa.orders_id = opb.orders_id and opb.products_id != '" . (int)$HTTP_GET_VARS['products_id'] . "' and opb.products_id = p.products_id and opb.orders_id = o.orders_id and p.products_status = '1' group by p.products_id order by o.date_purchased desc limit " . MAX_DISPLAY_ALSO_PURCHASED);[/codebox]

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Mysql sur ton serveur de prod ne te laissera pas mettre de requtes imbriquée, c'est pour cela que je t'ai proposée la deuxieme solution...

Pour ce qui est du DISTINCT ca aurait du éviter deux fois le meme produit. S'il est affiché deux fois ca veux juste dire que la personne a acheté deux trois fois le meme produit dans une commande.

Pour éviter ca, la requte premiere devient :


SELECT
p.id,
p.nom_".$_SESSION['langue'].",
p.image1,
p.prix

FROM
peel_produits p
,peel_commandes_articles ca

WHERE p.id = ca.produit_id

AND ca.commande_id IN (

SELECT DISTINCT commande_id FROM peel_commandes_articles
WHERE produit_id= '".$prod['id']."')

AND p.id <> '".$prod['id']."' ;
[/codebox]

mais je ne suis pas sur pour le symbole différent de ..

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Merci atila-diffusion, la requête marche bien, j'ai modifié <> par NOT LIKE


SELECT
p.id,
p.nom_".$_SESSION['langue'].",
p.image1,
p.prix
FROM peel_produits p
,peel_commandes_articles ca
WHERE p.id = ca.produit_id
AND ca.commande_id
IN (SELECT DISTINCT
commande_id FROM peel_commandes_articles
WHERE produit_id= '".$prod['id']."')
AND p.id NOT LIKE '".$prod['id']."'
LIMIT 2
;")
or DIE('Une erreur de connexion &agrave; la base s est produite ' . __LINE__ . '.<p>' . MYSQL_ERROR());
[/codebox]

Par contre elle marche nikel en local mais une fois sur le serveur elle ne marche plus à cause de SELECT DISTINCT apparament il faudrait la faire avec une jointure.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour paulanna, ton lien me renvoie vers ce même topic, j'ai pas tout capté là

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

oui bonjour tu dis que tu as un souci avec DISTINCT et je te demande si tu as fais ceci :

SELECT DISTINCT( commande_id) FROM peel_commandes_articles

à la place de

SELECT DISTINCT commande_id FROM peel_commandes_articles

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

En fait la requête de atila-diffusion marche trés bien en local sous easy php par contre sur le serveur j'ai un message d'erreur

Une erreur de connexion à la base s est produite 205.

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 'SELECT DISTINCT commande_id FROM peel_commandes_articles

A mon avis et c'est l'avis aussi de atila-diffusion le serveur n'accepte pas les requêtes imbriqués c'est pour ça qu'il faudrait la modifié en la faisant avec une jointure.

a++

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

ok, masi as tu essayé avec les ()

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

ok, masi as tu essayé avec les ()

Oui Paulanna j'ai essayé et ça ne marche pas avec les () en local comme sur le serveur.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

ok à la fin de la requete tu peut mettre LIMIT 0,2

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

code]

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