Page 2 of 2
Posted: Tue Dec 12, 2006 7:14 am
by neel_basu
Sorry I Cant Accept Your Thanks Cause I am Not Satisfied With My Code
neel_basu wrote:Now I Cant Decide Ho To Arrange The $curr_arr According To $num_arr
To Sort The Products
Please Anyone Solve It
No This Code Will Not Get Slower That Much
Posted: Tue Dec 12, 2006 7:26 am
by neel_basu
if you are trying to change separator of $hld_key_stat
Thats If You Want To Make This
atin bag(5) classy(9) Dark(7) Navy(4) Fabric(15)
Like
atin bag(5),classy(9),Dark(7),Navy(4),Fabric(15)
Just replace
Code: Select all
$hld_key_stat .= $curr_key."(". $num_match .")"." ";
With
Code: Select all
$hld_key_stat .= $curr_key."(". $num_match .")".",";
Posted: Tue Dec 12, 2006 7:31 am
by isaac_cm
ok, any other ideas !!
Posted: Tue Dec 12, 2006 7:35 am
by neel_basu
isaac_cm wrote:I would rather use two dimensional array to store the result like this
Would you Please Specify The Variable Name of That Array ??
Posted: Tue Dec 12, 2006 8:49 am
by isaac_cm
I do not understand you
like this:
$res = [keyword, number of occurrence]
Posted: Tue Dec 12, 2006 9:17 am
by neel_basu
But $res is The MySql Query Variable
Look
$num_arr Holds The
occurence Of x number Keyword in Your DB
$curr_arr Holds The Keword Holds The x th Keyword
After Using
array_multisort($num_arr, SORT_DESC);
$num_arr Get Arranged In Descending Order
neel_basu wrote:Now I Cant Decide How To Arrange The $curr_arr According To $num_arr
To Sort The Products
But The $curr_arr Doesn't Get Arrenger In Descending Order
So If You Remofe The First 3 From Your Conditions Thats It Will Show All The Matching Records of The Keyword Of The Current Product
isaac_cm wrote:fetch me 3 results of the higher 3 products
It Will Be Easier To Handel
Posted: Tue Dec 12, 2006 9:29 am
by isaac_cm
So If You Remofe The First 3 From Your Conditions Thats It Will Show All The Matching Records of The Keyword Of The Current Product
I really did understand what you mean by this sentence
After I get result like this
['satin bag',5], ['classy',9], ['Dark',7], ['Navy',4], ['Fabric',15]
how I can get 3 product do I select them randomly from ['Fabric',15] or what , I can access products by key only "prod_id"
thanks
Posted: Tue Dec 12, 2006 9:34 am
by neel_basu
So Here Is The 2d Array Version Of The Script
===============================
Code: Select all
<?php
//As You Are Separating Keywords By Space The Individual Jeywords Must Not Contain Spaces
$keyw = $_GET['product'];//You Can Also Use POST/Cookies Etc..
$host = "localhost";
$usr = "root";
$psw = "";
$db_name = "key"
$tbl_name = "shop"
$key_field = "key"
$product_field = "product";
$conn = mysql_connect($host, $usr, $psw) or die(mysql_error());
mysql_select_db($db_name) or die(mysql_error());
$sql = "select `$key_field` from `$tbl_name` where `$product_field` = '$keyw'";
$res = mysql_query($sql, $conn) or die(mysql_error());
//Assuming There Is No Repetation Of Product Name In the $product_field Coloumn of The Table
//So that is mysql_num_rows = 1
$curr_key = explode(" ", $res);
for($i=0;$i<=count($curr_key);$i++)
{
$sql_loop = "select `$key_field` from `$tbl_name` where `$product_field` like '$curr_key[$i]'";
$res_loop = mysql_query($sql_loop, $conn) or die(mysql_error());
$num_match = mysql_num_rows($res_loop);
$prod[$i][0] = $curr_key;
$prod[$i][1] = $num_match;
}
//Here $prod[$i][0] holds The Keyword And $prod[$i][1] Holds The Number Of Occurences
//**********************************************************************//
//**************It Is Not Arranged In Descending Order******************//
//**********************************************************************//
foreach($prod as $c)
{
while(list($k,$v) = each($c))
{
echo "$k .... $v";
}
}
?>
EDITED | Replaced $prd_m With $prod
Posted: Tue Dec 12, 2006 9:41 am
by neel_basu
With This Code You Can Select Either Random Or By index of The Arrays
But If You Wanna Show The Top 3 Results Thats In Descending Order Some Extra Codes are Required
Posted: Tue Dec 12, 2006 7:00 pm
by isaac_cm
ThANKS
random way would work, but for learning sake please show me how to get the higher 3 products
Posted: Tue Dec 12, 2006 10:39 pm
by neel_basu
isaac_cm wrote:no this way I get only the first 3 products, it could be done using limit 3
I will explain what I need in steps:
1- get the current selected products keywords and store it in a variable or array
2- loop through all the keywords, in each loop I have to get the number of finding this keyword in all products of the current category (ex: bags)
(ex: keywords = "satin bag(5), classy(9), magnetic clasp(2), Dark(7), Navy(4), Fabric(15)"
3- compare all number and get the higher 3 results (Fabric(15), classy(9), Dark(7)) then get one product id from each of the 3 results to display as a recommended product and exclude the current one of course
thanks
Look At The Code Carefully
Solition of 1-
Line 3 $keyw Contains The Current Product You Are Viewing
Solution 2-
Line 14 $sql is The sql Command To get the Keword List From The DataBase Table Separated By comma Or Space
And Then $res Holds That Result in single Line Separated By Some Separators
Line 18 $curr_key Makes An Array The Keywords
and Now Look In satin bag(5), classy(9), magnetic clasp(2), Dark(7), Navy(4), Fabric(15) 5,9,2,7,4 and 15 shows The Occurence Of That Very Keyword In The Database Table
Line 21 $sql_loop is the sql to search For The Occurences of each Keyword One After Another In A loop
Line 25 $num_match Holds The number Of Occurences Of That Keyword in that DataBase Table And It Does This Job By mysql_num_rows its a Trick look At This Line CaraFully
And Then $prod Is a 2d Array That Simply Stores It
==========================================================
The Best Would Be You Test This Script Then You'll Understand What It Does
Your Compleate Final Script
Posted: Thu Dec 14, 2006 10:20 am
by neel_basu
So Now The Final Compleate Script
========================
Code: Select all
<?php
function neelmax( $array )
{
foreach( $array as $value )
{
if( is_array($value) )
{
$subvalue = neelmax($value);
if( $subvalue > $return )
{
$return = $subvalue;
}
}
elseif($value > $return)
{
$return = $value;
}
}
return $return;
}
?>
<?php
//As You Are Separating Keywords By Space The Individual Jeywords Must Not Contain Spaces
$keyw = $_GET['product'];//You Can Also Use POST/Cookies Etc..
$host = "localhost";
$usr = "root";
$psw = "";
$db_name = "key"
$tbl_name = "shop"
$key_field = "key"
$product_field = "product";
$conn = mysql_connect($host, $usr, $psw) or die(mysql_error());
mysql_select_db($db_name) or die(mysql_error());
$sql = "select `$key_field` from `$tbl_name` where `$product_field` = '$keyw'";
$res = mysql_query($sql, $conn) or die(mysql_error());
//Assuming There Is No Repetation Of Product Name In the $product_field Coloumn of The Table
//So that is mysql_num_rows = 1
$curr_key = explode(" ", $res);
for($i=0;$i<=count($curr_key);$i++)
{
$sql_loop = "select `$key_field` from `$tbl_name` where `$product_field` like '$curr_key[$i]'";
$res_loop = mysql_query($sql_loop, $conn) or die(mysql_error());
$num_match = mysql_num_rows($res_loop);
$prod[$i][0] = $curr_key;
$prod[$i][1] = $num_match;
}
//Here $prod[$i][0] holds The Keyword And $prod[$i][1] Holds The Number Of Occurences
//**************************************************************************************//
//****************************It Is Not Arranged In Descending Order********************//
//**************************************************************************************//
$max = neelmax($prod);
for($i=0;$i<=count($prod);$i++)
{
if($prod[$i][1] == $max)
{
$top_prod_id = $i;
}
}
$sql_prod = "select `$product_field` from `$tbl_name` where `$key_field`` = '$prod[$top_prod_id][0]' && `$product_field` != '$keyw'";
$res_prod = mysql_query($sql_prod,$conn) or die(mysql_error());
while($db_arr = mysql_fetch_array($res_prod))
{
$top_prod_name = $db_arr[$product_field];
echo $top_prod_name;
}
if(mysql_num_rows($res_prod) == 0)
{
for($i=0;$i<=count($prod);$i++)
{
$prob_sql .= "`$key_field`` = '$prod[$i][0]' || ";
}
$prob_sql_final = substr($prob_sql,0,strlen($prob_sql)-3);
$org_sql = "select `$product_field` from `$tbl_name` where ".$prob_sql_final."&& `$product_field` != '$keyw'";
//echo $org_sql;//This Line Is To Test IfThe SQL Command Is Wrong To Test It Just Remove The Comment Before echo
$res_prod_oth = mysql_query($org_sql,$conn) or die(mysql_error());
while($db_arr_oth = mysql_fetch_array($res_prod_oth))
{
$prod_name_oth = $db_arr_oth[$product_field];
echo $prod_name_oth;
}
}
?>
Posted: Fri Dec 15, 2006 10:34 am
by isaac_cm
ok, I need to get product id in parent/child array
many thanks
Posted: Sat Dec 16, 2006 3:44 am
by neel_basu
Well This Script Can Handle ID (Compleately Untested)
======================================
Code: Select all
<?php
function neelmax( $array )
{
foreach( $array as $value )
{
if( is_array($value) )
{
$subvalue = neelmax($value);
if( $subvalue > $return )
{
$return = $subvalue;
}
}
elseif($value > $return)
{
$return = $value;
}
}
return $return;
}
?>
<?php
//As You Are Separating Keywords By Space The Individual Jeywords Must Not Contain Spaces
$keyw = $_GET['product'];//You Can Also Use POST/Cookies Etc..
$host = "localhost";
$usr = "root";
$psw = "";
$db_name = "key"
$tbl_name = "shop"
$key_field = "key"
$product_field = "product";
$product_id = "prod_id";
$conn = mysql_connect($host, $usr, $psw) or die(mysql_error());
mysql_select_db($db_name) or die(mysql_error());
$sql = "select `$key_field` from `$tbl_name` where `$product_field` = '$keyw'";
$res = mysql_query($sql, $conn) or die(mysql_error());
//Assuming There Is No Repetation Of Product Name In the $product_field Coloumn of The Table
//So that is mysql_num_rows = 1
$curr_key = explode(" ", $res);
for($i=0;$i<=count($curr_key);$i++)
{
$sql_loop = "select `$key_field`,`$product_id` from `$tbl_name` where `$product_field` like '$curr_key[$i]'";
$res_loop = mysql_query($sql_loop, $conn) or die(mysql_error());
$num_match = mysql_num_rows($res_loop);
$prod[$i][0] = $curr_key;
$prod[$i][1] = $num_match;
while($prod_id_wh = mysql_fetch_array($res_loop))
{
$prod[$i][2] = $prod_id_wh[$product_id];
}
}
//Here $prod[$i][0] holds The Keyword And $prod[$i][1] Holds The Number Of Occurences
//**************************************************************************************//
//****************************It Is Not Arranged In Descending Order********************//
//**************************************************************************************//
$max = neelmax($prod);
for($i=0;$i<=count($prod);$i++)
{
if($prod[$i][1] == $max)
{
$top_prod_id = $i;
}
}
$sql_prod = "select `$product_field`,`$product_id` from `$tbl_name` where `$key_field`` = '$prod[$top_prod_id][0]' && `$product_field` != '$keyw'";
$res_prod = mysql_query($sql_prod,$conn) or die(mysql_error());
while($db_arr = mysql_fetch_array($res_prod))
{
$top_prod_name = $db_arr[$product_field];
$top_prod_id = $db_arr[$product_id];
echo $top_prod_name;
}
if(mysql_num_rows($res_prod) == 0)
{
for($i=0;$i<=count($prod);$i++)
{
$prob_sql .= "`$key_field`` = '$prod[$i][0]' || ";
}
$prob_sql_final = substr($prob_sql,0,strlen($prob_sql)-3);
$org_sql = "select `$product_field`,`$product_id` from `$tbl_name` where ".$prob_sql_final."&& `$product_field` != '$keyw'";
//echo $org_sql;//This Line Is To Test IfThe SQL Command Is Wrong To Test It Just Remove The Comment Before echo
$res_prod_oth = mysql_query($org_sql,$conn) or die(mysql_error());
while($db_arr_oth = mysql_fetch_array($res_prod_oth))
{
$prod_name_oth = $db_arr_oth[$product_field];
$prod_id_oth = $db_arr_oth[$product_field];
echo $prod_name_oth."...."$prod_id_oth;
}
}
?>