Avatar billede dr_demento Nybegynder
10. august 2005 - 16:01 Der er 30 kommentarer

Problem med kunder der købte denne vare købte også Script

Hejsa allesammen!

Jeg har lidt problemer med mit "kunder der købte denne vare købte også:" script.

Scriptet vælger korrekt alle vareid'er udfra ordrertabellen, der er købt i forbindelse med det viste produkt, men hvis den samme vare er købt flere gange i forbindelse med det viste produkt, bliver den vist flere gange på listen, hvilket jo ser ret dumt ud.

Kan ik lige se mig ud af hvordan jeg skal kringle det, så hvis det samme produkt optræder flere gange i arrayet, bliver det stadigt kun vist een gang, og hvis et klogt hoved kunne hjælpe, ville det være guld.

Source:

<?php
$id='29';
include("./shop/db.php");

$cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

$vareidselect = mysql_query("SELECT ordreid FROM ordrer WHERE vareid = '$id'") or die (mysql_error());
while($fetchvareselect = mysql_fetch_array($vareidselect))

{

$outpickselect = mysql_query("SELECT * FROM ordrer WHERE ordreid = '$fetchvareselect[ordreid]' and vareid != '$id'") or die (mysql_error());

while($fetchvarer = mysql_fetch_array($outpickselect))
{

echo "$fetchvarer[vareid]" . "\n";
}
}
    ?>

Når jeg kører det udskriver det værdierne:
16 34 12 22 25 37 23 182 228 34 25 75 25 37 228 236 237 238 260 254 97 254  og som man kan se, er der flere værdier der optræder flere gange :(
Avatar billede jaw Nybegynder
10. august 2005 - 16:04 #1
Prøv med:
GROUP BY vareid

hvis jeg altså forstår dit problem :)
Avatar billede voirsous Nybegynder
10. august 2005 - 16:17 #2
en anden mulighed er at bruge array_unique() se www.php.net
Avatar billede voirsous Nybegynder
10. august 2005 - 16:17 #3
eller SELECT distinct(ordreid)
Avatar billede Slettet bruger
10. august 2005 - 19:30 #4
distinct skal bruges i forbindelse med GROUP BY, så jaw's forslag er optimalt.
Avatar billede Slettet bruger
10. august 2005 - 19:31 #5
Og det vil da på intet tidspunkt være en fordel at sortere de ubruelige forekomster fra  i php, hvis det kan gøres i MySQL forespørgslen.
Avatar billede dr_demento Nybegynder
11. august 2005 - 00:55 #6
Nu har jeg prøvet at implementere jeres forslag:

<?php
$id='29';
include("./shop/db.php");

$cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

$vareidselect = mysql_query("SELECT ordreid FROM ordrer WHERE vareid = '$id'") or die (mysql_error());
while($fetchvareselect = mysql_fetch_array($vareidselect))
{

$resulta = mysql_query("SELECT DISTINCT vareid FROM ordrer WHERE ordreid = '$fetchvareselect[ordreid]' and vareid != '$id' GROUP BY vareid");
while($fetchvarer = mysql_fetch_array($resulta))

{
echo "$fetchvarer[vareid]" . "\n";
}

}
    ?>


Men desværre udskriver hun stadig dette:
16 34 12 22 25 37 23 182 228 25 34 25 37 75 228 236 237 238 260 254 97 254
Avatar billede Slettet bruger
11. august 2005 - 07:17 #7
<?php
$id='29';
include("./shop/db.php");

$cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

$vareidselect = mysql_query("SELECT ordreid FROM ordrer WHERE vareid = '$id'") or die (mysql_error());
while($fetchvareselect = mysql_fetch_array($vareidselect))
{

$resulta = mysql_query("SELECT vareid FROM ordrer WHERE ordreid = '$fetchvareselect[ordreid]' and vareid != '$id' GROUP BY vareid");
while($fetchvarer = mysql_fetch_array($resulta))

{
echo "$fetchvarer['vareid']" . "\n";
}

}
    ?>
Avatar billede dr_demento Nybegynder
11. august 2005 - 17:00 #8
Får stadig stadig samme værdier:
16 34 12 22 25 37 23 182 228 25 34 25 37 75 228 236 237 238 260 254 97 254

Først fik jeg en parse error på echo "$fetchvarer['vareid']" . "\n";  men da jeg fjerne ' ' udskrev scriptet resultatet ovenfor..
Avatar billede jaw Nybegynder
11. august 2005 - 17:07 #9
Så skal du hellere fjerne det første ":

echo $fetchvarer['vareid'] . "\n";

Og mht. til de tal du skriver, så er vi da enige om, at det er $fetchvarer['vareid'] der giver de tal, ikke?
Avatar billede Slettet bruger
11. august 2005 - 17:23 #10
<?php
$id='29';
include("./shop/db.php");

$cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

$vareidselect = mysql_query("SELECT ordreid FROM ordrer WHERE vareid = '". $id ."'") or die (mysql_error());
while($fetchvareselect = mysql_fetch_array($vareidselect))
{

$resulta = mysql_query("SELECT vareid FROM ordrer WHERE ordreid = '". $fetchvareselect['ordreid'] ."' and vareid != '". $id ."' GROUP BY vareid");
while($fetchvarer = mysql_fetch_array($resulta))

{
echo $fetchvarer['vareid'];
}

}
    ?>
Avatar billede dr_demento Nybegynder
11. august 2005 - 20:38 #11
Jaw: Jo det er $fetchvarer['vareid'] der giver de tal.

Jeg har prøvet både med jaws rettelse og med de rettelser i scriptet wicez pastede, men stadig de akkurat samme tal... :(
Avatar billede dr_demento Nybegynder
11. august 2005 - 20:43 #12
Tallene er korrekt vare iderne på alle produkter der er købt i forbindelse med $id, men stadig er der desværre nogen der går igen..
Avatar billede jaw Nybegynder
11. august 2005 - 20:53 #13
Så må du lige paste hele din kode, som den ser ud nu. Jeg forstår nemlig ikke heeelt.
Avatar billede dr_demento Nybegynder
11. august 2005 - 21:00 #14
<?php
$id='29';
include("./shop/db.php");

$cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

$vareidselect = mysql_query("SELECT ordreid FROM ordrer WHERE vareid = '$id'") or die (mysql_error());
while($fetchvareselect = mysql_fetch_array($vareidselect))
{

$resulta = mysql_query("SELECT vareid FROM ordrer WHERE ordreid = '$fetchvareselect[ordreid]' and vareid != '$id' GROUP BY vareid");
while($fetchvarer = mysql_fetch_array($resulta))

{
echo $fetchvarer['vareid'] . "\n";
}

}
    ?>
Avatar billede Slettet bruger
11. august 2005 - 21:05 #15
Prøv med den her:

<?php
$id='29';
include("./shop/db.php");

$cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

$vareidselect = mysql_query("SELECT ordreid FROM ordrer WHERE vareid = '". $id ."'") or die (mysql_error());
while($fetchvareselect = mysql_fetch_array($vareidselect))
{

$resulta = mysql_query("SELECT vareid FROM ordrer WHERE ordreid = '". $fetchvareselect['ordreid'] ."' and vareid != '". $id ."' GROUP BY vareid");
while($fetchvarer = mysql_fetch_array($resulta))

{
echo $fetchvarer['vareid'];
}

}
    ?>


Den vil højst sandsynligt vise de samme numre, men heri er variablerne behandlet som de skal, men '' om arrays associative key.
Avatar billede dr_demento Nybegynder
11. august 2005 - 21:31 #16
wicez:
Nu er den opdateret til din version og returnerer: 16341222253723182228253425377522823623723826025497254
Avatar billede jaw Nybegynder
11. august 2005 - 21:32 #17
Så udskift:
echo $fetchvarer['vareid'];
med:
echo $fetchvarer['vareid'] ." ";
eller som du selv havde:
echo $fetchvarer['vareid'] . "\n";
Avatar billede Slettet bruger
11. august 2005 - 21:32 #18
Det er så fordi jeg har fjernet dit \n, der alligevel ikke blev brugt til linieskift..

Du kan erstatte:

echo $fetchvarer['vareid'];

med

echo $fetchvarer['vareid'] . ', ';
Avatar billede Slettet bruger
11. august 2005 - 21:33 #19
Men du må selv prøve at tjekke, hvad du gør galt - vores forslag kan ikke hjælpe noget, hvis du sidder med et andet internt problem.
Avatar billede jaw Nybegynder
11. august 2005 - 21:35 #20
Du kan f.eks. lave en ganske simpelt test:

<?
$result = mysql_query("SELECT vareid FROM ordrer GROUP BY vareid");
while($fetchvarer = mysql_fetch_array($resulta))
{
echo $fetchvarer['vareid'];
}
?>

uden ALT andet og så se om den grupperer eller ej.
Avatar billede dr_demento Nybegynder
11. august 2005 - 21:55 #21
Jeg har ingen anelse om hvad der går galt. har siddet og læst på group by og
distinct, efter min forståelse burde det virke. Det er derfor jeg søger hjælp blandt eksperter.

Jaw, det returnerer:
1111912120125127130143149161818222228232362372382525426029343770747578889397
Avatar billede jaw Nybegynder
11. august 2005 - 21:57 #22
Nå ja okey, så:

echo $fetchvarer['vareid'] ." ";
Avatar billede dr_demento Nybegynder
11. august 2005 - 22:07 #23
11 119 12 120 125 127 130 143 149 16 18 182 22 228 23 236 237 238 25 254 260 29 34 37 70 74 75 78 88 93 97
Avatar billede jaw Nybegynder
11. august 2005 - 22:21 #24
Så vidt jeg kan se, er der heller ikke 2 ens i den sætning?! Så er det jo et andet sted en i GROUP BY det går galt. Så må du stille og roligt bruge udelukkelsesmetoden, for jeg kan ikke lige se hvor det går galt.
Avatar billede Slettet bruger
12. august 2005 - 18:04 #25
Prøv at bruge dette:

<?php
$id='29';
include("./shop/db.php");

$cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

$vareidselect = mysql_query("SELECT ordreid FROM ordrer WHERE vareid = '". $id ."'") or die (mysql_error());
while($fetchvareselect = mysql_fetch_array($vareidselect))
{

$resulta = mysql_query("SELECT vareid FROM ordrer WHERE ordreid = '". $fetchvareselect['ordreid'] ."' and vareid != '". $id ."' GROUP BY vareid ORDER BY vareid ASC");
while($fetchvarer = mysql_fetch_array($resulta))

{
echo $fetchvarer['vareid'] . ' ';
}

}
    ?>

Så sorterer den også efter vareid, så er det lidt nemmere at se, hvor den går galt.
Avatar billede dr_demento Nybegynder
14. august 2005 - 15:41 #26
Hey, jeg fik en af mine venner til at kigge på det. Der skulle lidt omstrukturering af mine tabeller til, men nu virker det og ser sådan her ud:

<?
include("./shop/db.php");
$cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);


$vareIds=array();

// Hent ordrer der har købt samme vare
$ordreId=mysql_query("SELECT * from varer_ordrer_mapping where vareId=".$_GET['id']." GROUP BY ordreId");

// Kør alle ordre igennem
while($result=mysql_fetch_array($ordreId)){

    // Hent alle varer aktuelle ordrer har købt, som ikke er den samme som man ser på

    $vare=mysql_query("SELECT * from varer_ordrer_mapping WHERE vareId!=".$_GET['id']." && ordreId=".$result['ordreId']." GROUP BY vareId");

    // Kør alle fundne varer igennem og append til $vareId
    while($vareId=mysql_fetch_array($vare)){
        $vareIds[]=$vareId['vareId'];
}
}
// Remove duplicate VareIds
$vareIds = array_unique($vareIds);
shuffle($vareIds);
for($i=0;$i<5;$i++){
    echo $vareIds[$i].", ";
}
?>
Avatar billede dr_demento Nybegynder
14. august 2005 - 15:42 #27
men jaw og wicez tak for hjælpen. I kan bare smide et svar for point.
Avatar billede Slettet bruger
14. august 2005 - 17:35 #28
Selv tak, dejligt at det kom til at virke i sidste ende ;o)
Avatar billede jaw Nybegynder
14. august 2005 - 18:08 #29
Også selv tak herfra :)
Avatar billede jaw Nybegynder
22. august 2005 - 00:02 #30
Og gider du så venligst acceptere?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester