Hi Jochen,
Just a performance thing rather than elegance:
Does that DB layer support prepared statements?
$upsql = "update #__vm_product set custom_attribute='".implode(';',$imp).
"' where product_id=".$last_pid;
Might see some benefit being a prepared statement if it's fired quite a few
times in that foreach loop.
Aaron
----- Original Message -----
From: Jochen Daum
To: PHPUG
Sent: Thursday, February 19, 2009 10:54 AM
Subject: [phpug] can this be done more elegantly
Hi,
I have a common piece of code below and I wonder if this can be done more
elegantly. The code below reads records from a database - in this example a
product_id and lots of skus that represent variations of this product. It then
implodes all skus of a product into a field in another table. This is done for
each product_id.
I know this can be done with less lines of code by using @, condensing if
statements and accepting that it throws E_NOTICE some times. But aside from
that, can it be done completely diferently and more elegantly.
I'm seeing myself writing this piece of code over and over, covering database
queries or converting one array structure into another.
BTW, database layer is from Joomla, but could be any database layer.
Cheers,
Jochen
$db =& JFactory::getDBO();
$sql = 'select product_id, product_sku from
#__vm_product_selecon_product_codes '.
'order by product_id, product_sku ';
$db->setQuery($sql);
$list = $db->loadAssocList();
$last_pid = 0;
$first = 1;
$imp=array();
if ($list){
foreach ($list as $entry){
if ($entry['product_sku'] && !in_array($entry['product_sku'],
$imp)){
$imp[] = $entry['product_sku'];
}
if (!$first){
if ($last_pid != $entry['product_id']){
$upsql = "update #__vm_product set
custom_attribute='".implode(';',$imp).
"' where product_id=".$last_pid;
$db->setQuery($upsql);
$db->query();
$imp=array();
$last_pid = $entry['product_id'];
}
}else{
$first = 0;
}
}
}
}
--~--~---------~--~----~------------~-------~--~----~
NZ PHP Users Group: http://groups.google.com/group/nzphpug
To post, send email to [email protected]
To unsubscribe, send email to
[email protected]
-~----------~----~----~----~------~----~------~--~---