Jump to content


Corporate Sponsors


Latest News: (loading..)

- - - - -

Help Needed with SQL Code


14 replies to this topic

#1 Mort-lemur

  • Community Member
  • 1,045 posts
  • Real Name:Heather
  • Gender:Female
  • Location:UK

Posted 12 January 2012, 10:45

Hi,

I am trying to ensure my Google Feed items are correct when submitted (as I sell both taxable items and non-taxable items (UK VAT Rules) - Currently Googlefeeder adds Vat to everything. Jack-MCS has given me the following code to try, but it does not quite work....

Find:
FORMAT( IFNULL(specials.specials_new_products_price, products.products_price) * " . OPTIONS_TAX_CALC . ",2) AS price,

Replace with:
FORMAT(IFNULL(specials.specials_new_products_price, products.products_price) * IFNULL(NULLIF(products.products_tax_class_id, 0)," . OPTIONS_TAX_CALC . "), 2) AS price,

What Im trying to do is do the tax calculation if the tax class =1 but not do the tax calculation if the tax class does not equal 1

I have spent many hours on this, but know nothing about SQL syntax, and Jack does not currently have the time to resolve.

I need to sort this out as Google has started sending warnings regarding different prices on feed to the shop price.

Can anyone well versed in SQL commands take a look please?

Many Thanks
Now my store is the way I want it - Secure, working well, and good Google Ranks - Thanks to all for the help given.

If you want to see the mods I have installed, then see my profile.

#2 Mort-lemur

  • Community Member
  • 1,045 posts
  • Real Name:Heather
  • Gender:Female
  • Location:UK

Posted 12 January 2012, 19:03

Grrr ! How can I spend 2 days tinkering with the same line of code ??!!??
Now my store is the way I want it - Secure, working well, and good Google Ranks - Thanks to all for the help given.

If you want to see the mods I have installed, then see my profile.

#3 Mort-lemur

  • Community Member
  • 1,045 posts
  • Real Name:Heather
  • Gender:Female
  • Location:UK

Posted 13 January 2012, 16:58

Ok - Another day "Wasted" on this...but I am a little nearer....

If I use the code:
FORMAT(IFNULL(specials.specials_new_products_price, products.products_price) * IFNULL(NULLIF(products.products_tax_class_id, 1)," . OPTIONS_TAX_CALC . "), 2) AS price,

The outputted feed file ONLY contains items subject to VAT and has the correct Vat rate applied to them.

What I now need is a way to include items where tax class does not = 1 and not have tax applied to them in the output file.

Surely there is someone out there who knows SQL Syntax well enough to help solve this?

Thanks
Now my store is the way I want it - Secure, working well, and good Google Ranks - Thanks to all for the help given.

If you want to see the mods I have installed, then see my profile.

#4 bruyndoncx

  • Community Member
  • 2,382 posts
  • Real Name:Carine Bruyndoncx
  • Gender:Female
  • Location:Belgium/ Antwerp/ Turnhout/ Arendonk

Posted 13 January 2012, 18:29

yeah, sure, but how can we test this without having a complete sql command, or php file to test ?
please post some more complete code then you're more likely to find some help ...
Hava a nice day !
Carine Bruyndoncx

KEUKENLUST, Everything but the kitchensink !

#5 Mort-lemur

  • Community Member
  • 1,045 posts
  • Real Name:Heather
  • Gender:Female
  • Location:UK

Posted 13 January 2012, 19:44

Ok thanks for that, I dont like posting large amounts of code unless its asked for. Below is the code from admin/googlefeeder.php with line 201 being the offending line - which is modded as per my last post.
Thanks

<?php
//  Title: Google Base Data Feeder
//  Last Update: 12/25/09 by Jack_mcs at oscommerce-solution.com
//  google feed requirements - http://www.google.com/support/merchants/bin/answer.py?hl=en&answer=188494
chdir('../');
include_once 'includes/application_top.php';
/*************** BEGIN MASTER SETTINGS ******************/
define('SEO_ENABLED','true');    //Change to 'false' to disable if Ultimate SEO URLs is not installed
define('FEEDNAME', 'data-feed.txt');	   //from your googlebase account
define('DOMAIN_NAME', 'www.mysite.co.uk'); //your correct domain name (don't include www unless it is used)
define('FTP_USERNAME', 'My_Username'); //created from within your googlebase account
define('FTP_PASSWORD', 'my_Password'); //created from within your googlebase account
define('FTP_ENABLED', (isset($_GET['noftp']) ? '0' : '1'));	  //set to 0 to disable
define('CONVERT_CURRENCY', '0'); //set to 0 to disable - only needed if a feed in a difference currecny is required
define('CURRENCY_TYPE', 'GBP');  //(eg. USD, EUR, GBP)
define('DEFAULT_LANGUAGE_ID', 1);   //Change this to the id of your language.  BY default 1 is english
define('QUOTES_CATEGORY_NAME',''); //if the Quotes contribution is installed, enter the name of the quotes category here
/*************** OPTIONS - IF ENABLED, ALSO SET THE SIMILAR OPTION FARTHER DOWN ******************/
define('OPTIONS_ENABLED', 1);
define('OPTIONS_ENABLED_AGE_RANGE', 0);
define('OPTIONS_ENABLED_ATTRIBUTES', 0);
define('OPTIONS_ENABLED_BRAND', 1);		    //if set, see options for this setting below
define('OPTIONS_ENABLED_CONDITION', 1);
define('OPTIONS_ENABLED_CURRENCY', 0);
define('OPTIONS_ENABLED_EXPIRATION', 1);
define('OPTIONS_ENABLED_FEED_LANGUAGE', 0);
define('OPTIONS_ENABLED_GTIN', 0);			  //if set, a database field named products_gtin must exist
define('OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY', 0); //http://www.google.com/support/merchants/bin/answer.py?answer=160081
define('OPTIONS_ENABLED_GOOGLE_UTM', 0);
define('OPTIONS_ENABLED_ISBN', 0);			  //if set, a database field named products_isbn must exist
define('OPTIONS_ENABLED_MADE_IN', 0);
define('OPTIONS_ENABLED_MPN', 1);			   //if set, see options for this setting below
define('OPTIONS_ENABLED_PRODUCT_MODEL', 0);	 //displays the product model
define('OPTIONS_ENABLED_PRODUCT_TYPE', 1);
define('OPTIONS_ENABLED_SHIPPING', 0);
define('OPTIONS_ENABLED_INCLUDE_TAX', 2);	   //0 = no tax, 1 = uses google method, 2 = UK Vat
define('OPTIONS_ENABLED_UPC', 0);			   //if set, a database field named products_upc must exist
define('OPTIONS_ENABLED_WEIGHT', 1);
//some of the following only work if the matching option is enabled above.
define('OPTIONS_AGE_RANGE', '20-90 years');
define('OPTIONS_AVAILABILITY', 'status');	 //in stock - Include this value if you are certain that it will ship (or be in-transit to the customer) in 3 business days or less.
											    //available for order - Include this value if it will take 4 or more business days to ship it to the customer.
											    //out of stock - You’re currently not accepting orders for this product.
											    //preorder - You are taking orders for this product, but it’s not yet been released.
											    //if empty (no entry), the data will be loaded from the database. A field in the products description table named products_availability is required
											    //if "quantity," the field will be popuplated via the quantity: 0 or less = out of stock, greater than 0 = in stock
											    //if "status," the field will be popuplated via the status field. in or out of stock
define('OPTIONS_BRAND', 'manu');			    //leave blank to load from the database field named products_brand, set to "name"  to substitute the products name, manu to substitute the manufactueres name or model to substitute the products model
define('OPTIONS_CONDITION', 'new');			 //possible entries are New, Refurbished, Used or blank, which loads from the database field named products_condition
define('OPTIONS_CURRENCY', 'USD');
define('OPTIONS_CURRENCY_THOUSANDS_POINT', ','); //this is the thousands point as in $1,000.
define('OPTIONS_DATE_FORMAT', 'Y-m-d');		 //change how the date is formatted
define('OPTIONS_FEED_LANGUAGE', 'en');
define('OPTIONS_GOOGLE_UTM', '?utm_source=GoogleBase1&utm_medium=BaseFeed1&utm_campaign=products'); //see http://www.google.com/support/googleanalytics/bin/answer.py?hl=en&answer=55578
define('OPTIONS_GOOGLE_PRODUCT_CATEGORY', '');  //enter db to load from a database field named google_product_category enter or enter a specific google category - see taxomy - http://www.google.com/support/merchants/bin/answer.py?answer=160081
define('OPTIONS_GTIN', '');
define('OPTIONS_ISBN', '');
define('OPTIONS_MADE_IN', 'US');
define('OPTIONS_MPN', 'model');					   //leave blank to load from the database field named products_mpn, set to "name"  to substitute the products name, manu to substitute the manufactueres name or model to substitute the products model
define('OPTIONS_PRODUCT_TYPE', 'full'); //full means the full category path (i.e., hardware,printers), anything else, or blank, means just the products category (i.e., printers)
//the following is for the shipping override option - enter multiple values separated by a comma
//Format entries follow. A colon must be present for each field, whether it is entered or not.
// COUNTRY - OPTIONAL - If country isn't included, we'll assume the shipping price applies to the target country of the item. If region isn't included, the shipping price will apply across the entire country.
// REGION  - OPTIONAL - blank for entire country, otherwise, us two-letter State (CA), full zip code (90210) or wildcard zip code (902*)
// SERVICE - OPTIONAL - The service class or delivery speed, i.e. ground
// PRICE   - REQUIRED - Fixed shipping price (assumes the same currency as the price attribute)
define('OPTIONS_SHIPPING_STRING', 'US:FL:Ground:7.00'); //says charge shipping to US for residents of Florida at 5% and don't apply tax to shipping
define('OPTIONS_TAX_RATE' , '20.0'); //default = 0 (e.g. for 20.0% tax use "$taxRate = 20.0;")  //only used in the next line
define('OPTIONS_TAX_CALC', (OPTIONS_ENABLED_INCLUDE_TAX == 2 ? (OPTIONS_TAX_RATE/100) + 1 : '1')); //UK. US tax rate - US is ignorded since it is 1
//the following is for the tax override option - enter multiple values separated by a comma
//Format entries follow. A colon must be present for each field, whether it is entered or not.
// COUNTRY  - OPTIONAL - country the tax applies to - only US for now
// REGION   - OPTIONAL - blank for entire country, otherwise, us two-letter State (CA), full zip code (90210) or wildcard zip code (902*)
// TAX	  - REQUIRED - default = 0 (e.g. for 5.76% tax use 5.76)
// SHIPPING - OPTIONAL - do you charge tax on shipping - choices are y or n
define('OPTIONS_TAX_STRING', 'US:FL:5.00:n'); //says charge tax to US for residents of Florida at 5% and don't apply tax to shipping
define('OPTIONS_UPC', '');
define('OPTIONS_WEIGHT_ACCEPTED_METHODS', 'kg'); //Valid units include lb, pound, oz, ounce, g, gram, kg, kilogram.
//the following allow skipping certain items
define('OPTIONS_IGNORE_PRODUCT_PRICE', 1);  //0 = include products with price of 0 in output, 1 = ignore products with price of 0
define('OPTIONS_IGNORE_PRODUCT_ZERO', 0);  //0 = include products with qty of 0 in output, 1 = ignore products with qty of 0
/*************** END MASTER SETTINGS ******************/

/*************** NO EDITS NEEDED BELOW THIS LINE *****************/
//********************
//  Start TIMER
//  -----------
$stimer = explode( ' ', microtime() );
$stimer = $stimer[1] + $stimer[0];
//  -----------

$OutFile = "feeds/" . FEEDNAME;
$destination_file = FEEDNAME;
$source_file = $OutFile;
$imageURL = 'http://' . DOMAIN_NAME . '/images/';
if(SEO_ENABLED=='true'){
   $productURL = 'product_info.php'; // ***** Revised for SEO
   $productParam = "products_id=";   // ***** Added for SEO
}else{
   $productURL = 'http://' . DOMAIN_NAME . '/product_info.php?products_id=';
}
$already_sent = array();
if(CONVERT_CURRENCY)
{
   if(SEO_ENABLED=='true'){
	   $productParam="currency=" . CURRENCY_TYPE . "&products_id=";
   }else{
	   $productURL = "http://" . DOMAIN_NAME . "/product_info.php?currency=" . CURRENCY_TYPE . "&products_id=";  //where CURRENCY_TYPE is your currency type (eg. USD, EUR, GBP)
   }
}
$feed_exp_date = @date(OPTIONS_DATE_FORMAT, time() + 2419200 );
if (!($link=mysql_connect(DB_SERVER,DB_SERVER_USERNAME,DB_SERVER_PASSWORD))) {
    echo "Error when connecting itself to the data base";
    exit();
}
if (!mysql_select_db( DB_DATABASE , $link )) {
   echo "Error the data base does not exist";
   exit();
}
$quotes = '';
if (QUOTES_CATEGORY_NAME !== '') {
   $quotes = " and products.customers_email_address = '' and products.quotes_email_address = ''";
}
$extraFields = '';
if (OPTIONS_AVAILABILITY == '') {
   $extraFields .= ' products_description.products_availability as availability, ';
}
if (OPTIONS_ENABLED_BRAND == 1) {
   if (strlen(OPTIONS_BRAND) == 0) {
	   $extraFields .= ' products.products_brand as brand, ';
   } else {
	   switch (OPTIONS_BRAND) {
		   case 'name':   $extraFields .= ' products_description.products_name as brand, '; break;
		   case 'manu':   $extraFields .= ' manufacturers.manufacturers_name as brand, ';   break;
		   case 'model':  $extraFields .= ' products.products_model as brand, ';		    break;
		   default:	   $extraFields .= ' products_description.products_name as brand, ';
	   }
   }
}
if (OPTIONS_ENABLED_CONDITION == 1 && strlen(OPTIONS_CONDITION) == 0) {
   $extraFields .= ' products.products_condition as pcondition, ';
}
if (OPTIONS_ENABLED_GTIN == 1  && strlen(OPTIONS_GTIN) == 0) {
   $extraFields .= ' products.products_gtin as gtin, ';
}
if (OPTIONS_ENABLED_ISBN == 1  && strlen(OPTIONS_ISBN) == 0) {
   $extraFields .= ' products.products_isbn as isbn, ';
}
if (OPTIONS_ENABLED_MPN == 1) {
   if (strlen(OPTIONS_MPN) == 0) {
	   $extraFields .= ' products.products_mpn as mpn, ';
   } else {
	   switch (OPTIONS_MPN) {
		   case 'name':   $extraFields .= ' products_description.products_name as mpn, '; break;
		   case 'manu':   $extraFields .= ' manufacturers.manufacturers_name as mpn, ';   break;
		   case 'model':  $extraFields .= ' products.products_model as mpn, ';		    break;
		   default:	   $extraFields .= ' products_description.products_name as mpn, ';
	   }
   }
}
if (OPTIONS_ENABLED_UPC == 1  && strlen(OPTIONS_UPC) == 0) {
   $extraFields .= ' products.products_upc as upc, ';
}
if (OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY == 1 && OPTIONS_GOOGLE_PRODUCT_CATEGORY == 'db') {
   $extraFields .= ' products_description.google_product_category as google_category, ';
}

$sql = "
SELECT concat( '" . $productURL . "' ,products.products_id) AS product_url,
products_model AS prodModel,
manufacturers.manufacturers_id,
products.products_id AS id,
products_description.products_name AS name,
products_description.products_description AS description,
products.products_quantity AS quantity,
products.products_status AS prodStatus,
products.products_weight AS prodWeight, " . $extraFields . "
FORMAT(IFNULL(specials.specials_new_products_price, products.products_price) * IFNULL(NULLIF(products.products_tax_class_id, 1)," . OPTIONS_TAX_CALC . "), 2) AS price,
CONCAT( '" . $imageURL . "' ,products.products_image) AS image_url,
products_to_categories.categories_id AS prodCatID,
categories.parent_id AS catParentID,
categories_description.categories_name AS catName
FROM (categories,
categories_description,
products,
products_description,
products_to_categories)
left join manufacturers on ( manufacturers.manufacturers_id = products.manufacturers_id )
left join specials on ( specials.products_id = products.products_id AND ( ( (specials.expires_date > CURRENT_DATE) OR (specials.expires_date is NULL) OR (specials.expires_date = 0) ) AND ( specials.status = 1 ) ) )
WHERE products.products_id=products_description.products_id
AND products.products_id=products_to_categories.products_id
AND products_to_categories.categories_id=categories.categories_id
AND categories.categories_id=categories_description.categories_id " . $quotes . "
AND categories_description.language_id = " . DEFAULT_LANGUAGE_ID . "
AND products_description.language_id = " . DEFAULT_LANGUAGE_ID . "
ORDER BY
products.products_id ASC
";
$quotes = '';
if (QUOTES_CATEGORY_NAME !== '') {
    $quotes = " and categories_description.categories_name NOT LIKE '" . QUOTES_CATEGORY_NAME . "' ";
}
$catInfo = "
SELECT
categories.categories_id AS curCatID,
categories.parent_id AS parentCatID,
categories_description.categories_name AS catName
FROM
categories,
categories_description
WHERE categories.categories_id = categories_description.categories_id " . $quotes . "
AND categories_description.language_id = " . DEFAULT_LANGUAGE_ID . "";
function findCat($curID, $catTempPar, $catTempDes, $catIndex) {
   if( (isset($catTempPar[$curID])) && ($catTempPar[$curID] != 0) ) {
	   if(isset($catIndex[$catTempPar[$curID]])) {
		   $temp=$catIndex[$catTempPar[$curID]];
	   } else {
		   $catIndex = findCat($catTempPar[$curID], $catTempPar, $catTempDes, $catIndex);
		   $temp = $catIndex[$catTempPar[$curID]];
	   }
   }
   if( (isset($catTempPar[$curID])) && (isset($catTempDes[$curID])) && ($catTempPar[$curID] == 0) ) {
	   $catIndex[$curID] = $catTempDes[$curID];
   } else {
	   $catIndex[$curID] = $temp . ", " . $catTempDes[$curID];
   }
   return $catIndex;
}
$catIndex = array();
$catTempDes = array();
$catTempPar = array();
$processCat = mysql_query( $catInfo )or die( $FunctionName . ": SQL error " . mysql_error() . "| catInfo = " . htmlentities($catInfo) );
while ( $catRow = mysql_fetch_object( $processCat ) ) {
   $catKey = $catRow->curCatID;
   $catName = $catRow->catName;
   $catParID = $catRow->parentCatID;
   if($catName != "") {
	  $catTempDes[$catKey]=$catName;
	  $catTempPar[$catKey]=$catParID;
   }
}
foreach($catTempDes as $curID=>$des)  { //don't need the $des
   $catIndex = findCat($curID, $catTempPar, $catTempDes, $catIndex);
}
$_strip_search = array(
"![\t ]+$|^[\t ]+!m", // remove leading/trailing space chars
'%[\r\n]+%m'); // remove CRs and newlines
$_strip_replace = array(
'',
' ');
$_cleaner_array = array(">" => "> ", "&reg;" => "", "&nbsp;" => " ", "®" => "", "&trade;" => "", "™" => "", "\t" => "", " " => "", "&quot;" => "\"");

if ( file_exists( $OutFile ) ) {
   unlink( $OutFile );
}
$output = "link\ttitle\tdescription\tprice\timage_link\tid\tavailability";
$attributesColumns = array();
//create optional section
if(OPTIONS_ENABLED == 1) {
   if(OPTIONS_ENABLED_AGE_RANGE == 1)   $output .= "\tage_range";
   if(OPTIONS_ENABLED_BRAND == 1)			 $output .= "\tbrand";
   if(OPTIONS_ENABLED_CONDITION == 1)	    $output .= "\tcondition";
   if(OPTIONS_ENABLED_CURRENCY == 1)		 $output .= "\tcurrency";
   if(OPTIONS_ENABLED_EXPIRATION == 1)	   $output .= "\texpiration_date";
   if(OPTIONS_ENABLED_FEED_LANGUAGE == 1)    $output .= "\tlanguage";
   if(OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY == 1) $output .= "\tgoogle product_category";
   if(OPTIONS_ENABLED_GTIN == 1)			 $output .= "\tgtin";
   if(OPTIONS_ENABLED_ISBN == 1)			 $output .= "\tisbn";
   if(OPTIONS_ENABLED_MADE_IN == 1)		  $output .= "\tmade_in";
   if(OPTIONS_ENABLED_MPN == 1)				 $output .= "\tmpn";
   if(OPTIONS_ENABLED_PRODUCT_MODEL == 1)    $output .= "\tmodel";
   if(OPTIONS_ENABLED_PRODUCT_TYPE == 1)	 $output .= "\tproduct_type";
   if(OPTIONS_ENABLED_SHIPPING == 1)		  $output .= "\tshipping";
   if(OPTIONS_ENABLED_INCLUDE_TAX == 1)		 $output .= "\ttax";
   if(OPTIONS_ENABLED_UPC == 1)			  $output .= "\tupc";
   if(OPTIONS_ENABLED_WEIGHT == 1)		   $output .= "\tweight";
   if (OPTIONS_ENABLED_ATTRIBUTES == 1)  {
	   $products_options_name_query = mysql_query("select distinct popt.products_options_id, popt.products_options_name from products_options popt, products_attributes patrib where popt.language_id = '" . (int)1 . "' order by popt.products_options_name") or die(mysql_error());
	   while ($products_options_name = mysql_fetch_object($products_options_name_query)) {
		   $attributesColumns[] = $products_options_name->products_options_name;
		   $name = strtolower($products_options_name->products_options_name);
		   $name = str_replace(" ","_", $name);
		   $output .= "\tc:" . $name;
	   }
	   /*
	   //If you want to only show particular attributes, comment out the above and uncomment this section.
	   //Then enter two lines for each one you want to show. For example, if the atttributes you want to
	   //show are named Color and Fabric, the entries would appear as follows:
	   $attributesColumns[] = "Color";
	   $attributesColumns[] = "Fabric";
	   $output .= "\tc:" . strtolower("Color");
	   $output .= "\tc:" . strtolower("Fabric");
	   */
   }
}
$output .= "\n";

$result=mysql_query( $sql )or die( $FunctionName . ": SQL error " . mysql_error() . "| sql = " . htmlentities($sql) );
//Currency Information
if(CONVERT_CURRENCY) {
   $sql3 = "
   SELECT
   currencies.value AS curUSD
   FROM
   currencies
   WHERE currencies.code = '" . CURRENCY_TYPE . "'";
   $result3=mysql_query( $sql3 )or die( $FunctionName . ": SQL error " . mysql_error() . "| sql3 = " . htmlentities($sql3) );
   $row3 = mysql_fetch_object( $result3 );
}
$loop_counter = 0;
$statsArray = array();
while( $row = mysql_fetch_object( $result ) ) {
   if (isset($already_sent[$row->id])) continue; // if we've sent this one, skip the rest of the while loop
   if (OPTIONS_IGNORE_PRODUCT_PRICE > 0 && $row->price <= 0) continue; //skip products with 0 price
   if (OPTIONS_IGNORE_PRODUCT_ZERO > 0 && $row->quantity < 1) continue; //skip products with 0 qty
   if (OPTIONS_IGNORE_PRODUCT_PRICE < 1 && $row->price <= 0) $statsArray['price']++; //record for warning
   if (OPTIONS_IGNORE_PRODUCT_ZERO < 1 && $row->quantity < 1) $statsArray['qty']++; //record for warning
   $statsArray['total']++;
   if ( $row->prodStatus == 1 ) {
	  if (CONVERT_CURRENCY) {
		  $row->price = preg_replace("/[^.0-9]/", "", $row->price);
		  $row->price = $row->price *  $row3->curUSD;
		  $row->price = number_format($row->price, 2, '.', OPTIONS_CURRENCY_THOUSANDS_POINT);
	  }
	  $availability = '';
	  switch (OPTIONS_AVAILABILITY) {
		 case 'quantity': $availability = ($row->quantity > 0 ? 'in stock' : 'out of stock'); break;
		 case 'status':   $availability = ($row->prodStatus == 1 ? 'in stock' : 'out of stock'); break;
		 case '':		 $availability = $row->availability; break;
		 default:		 $availability = OPTIONS_AVAILABILITY;
	  }
	  $google_utm = (OPTIONS_ENABLED_GOOGLE_UTM ? OPTIONS_GOOGLE_UTM : '');
	  if(SEO_ENABLED=='true'){
		  $output .= tep_href_link($productURL,$productParam . $row->id, 'NONSSL', false) . $google_utm . "\t";
	  } else {
		  $output .= $row->product_url . $google_utm . "\t";
	  }
	  $output .=
	  preg_replace($_strip_search, $_strip_replace, strip_tags( strtr($row->name, $_cleaner_array) ) ) . "\t" .
	  preg_replace($_strip_search, $_strip_replace, strip_tags( strtr($row->description, $_cleaner_array) ) ) . "\t" .
	  $row->price . "\t" .
	  $row->image_url . "\t" .
    //  $catIndex[$row->prodCatID] . "\t" .
	  $row->id . "\t" .
	  $availability;
	  //optional values section
	  if(OPTIONS_ENABLED == 1) {
		 if(OPTIONS_ENABLED_AGE_RANGE == 1)
		    $output .= "\t" . OPTIONS_AGE_RANGE;
		 if(OPTIONS_ENABLED_BRAND == 1)
		    $output .= "\t" . (isset($row->brand) ? $row->brand : (strlen(OPTIONS_BRAND) ? $row->name : "Not Supported"));
		 if(OPTIONS_ENABLED_CONDITION == 1)
		    $output .= "\t" . (isset($row->pcondition) ? $row->pcondition : OPTIONS_CONDITION);
		 if(OPTIONS_ENABLED_CURRENCY == 1)
		    $output .= "\t" . OPTIONS_CURRENCY;
		 if(OPTIONS_ENABLED_EXPIRATION == 1)
		    $output .= "\t" . $feed_exp_date;
		 if(OPTIONS_ENABLED_FEED_LANGUAGE == 1)
		    $output .= "\t" . OPTIONS_FEED_LANGUAGE;
		 if(OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY == 1)
		    $output .= "\t" . (OPTIONS_GOOGLE_PRODUCT_CATEGORY == 'db' ? $row->google_category : OPTIONS_GOOGLE_PRODUCT_CATEGORY);
		 if(OPTIONS_ENABLED_GTIN == 1)
		    $output .= "\t" . (isset($row->gtin) ? $row->gtin : (strlen(OPTIONS_GTIN) ? OPTIONS_GTIN : "Not Supported"));
		 if(OPTIONS_ENABLED_ISBN == 1)
		    $output .= "\t" . (isset($row->isbn) ? $row->isbn : (strlen(OPTIONS_ISBN) ? OPTIONS_ISBN : "Not Supported"));
		 if(OPTIONS_ENABLED_MADE_IN == 1)
		    $output .= "\t" . OPTIONS_MADE_IN;
		 if(OPTIONS_ENABLED_MPN == 1)
		    $output .= "\t" . (isset($row->mpn) ? $row->mpn : (strlen(OPTIONS_MPN) ? OPTIONS_MPN : "Not Supported"));
		 if(OPTIONS_ENABLED_PRODUCT_MODEL == 1)
		    $output .= "\t" . (! empty($row->prodModel) ? $row->prodModel : $row->catName);
		 if(OPTIONS_ENABLED_PRODUCT_TYPE == 1)
		    $output .= "\t" . ((OPTIONS_PRODUCT_TYPE == strtolower('full')) ? $catIndex[$row->prodCatID] : $row->catName);
		 if(OPTIONS_ENABLED_SHIPPING == 1)
		    $output .= "\t" . OPTIONS_SHIPPING_STRING;
		 if(OPTIONS_ENABLED_INCLUDE_TAX == 1)
		    $output .= "\t" . OPTIONS_TAX_STRING;
		 if(OPTIONS_ENABLED_UPC == 1)
		    $output .= "\t" . (isset($row->upc) ? $row->upc : (strlen(OPTIONS_UPC) ? OPTIONS_UPC : "Not Supported"));
		 if(OPTIONS_ENABLED_WEIGHT == 1)
		    $output .= "\t" . $row->prodWeight . ' ' .OPTIONS_WEIGHT_ACCEPTED_METHODS;
		 /******************* BEGIN HANDLING THE ATTRIBUTES ********************/
		 if (OPTIONS_ENABLED_ATTRIBUTES == 1)
		 {
		    $products_attributes_query = mysql_query("select count(*) as total from products_options popt, products_attributes patrib where patrib.products_id='" . $row->id . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)1 . "'");
		    $products_attributes = mysql_fetch_object($products_attributes_query);
		    if ($products_attributes->total > 0) {
			  $products_options_name_query = mysql_query("select distinct popt.products_options_id, popt.products_options_name from products_options popt, products_attributes patrib where patrib.products_id='" . (int)$row->id . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)1 . "' order by popt.products_options_name") or die(mysql_error());
			  $trackTabs = '';
			  while ($products_options_name = mysql_fetch_object($products_options_name_query)) {
			    $products_options_array = array();
			    $products_options_query = mysql_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from products_attributes pa, products_options_values pov where pa.products_id = '" . (int)$row->id . "' and pa.options_id = '" . $products_options_name->products_options_id . "' and pa.options_values_id = pov.products_options_values_id and pov.language_id = '" . (int)1 . "'");
			    while ($products_options = mysql_fetch_object($products_options_query)) {
				  $products_options_array[] = array('id' => $products_options->products_options_values_id, 'text' => $products_options->products_options_values_name);
			    }
			    for ($a = 0; $a < count($attributesColumns); ++$a)
			    {
				   if ($products_options_name->products_options_name == $attributesColumns[$a])
				   {
					 if ($a == 0)
					   $trackTabs = "\t";
					 else
					 {
					   if (empty($trackTabs))
						 $trackTabs = str_repeat("\t", $a);
					   $trackTabs .= "\t";
					 }
					 $output .= $trackTabs;
					 foreach ($products_options_array as $arr)
					   $output .=  $arr['text'] . ',';
					 $output = substr($output, 0, -1);
				   }
			    }
			  }
		    }
		 }
		 /******************* END HANDLING THE ATTRIBUTES ********************/
	  }
	  $output .= " \n";
   }
   $already_sent[$row->id] = 1;
   $loop_counter++;
   if ($loop_counter>750) {
	  $fp = fopen( $OutFile , "a" );
	  $fout = fwrite( $fp , $output );
	  fclose( $fp );
	  $loop_counter = 0;
	  $output = "";
   }
}
$fp = fopen( $OutFile , "a" );
$fout = fwrite( $fp , $output );
fclose( $fp );
echo '<p style="margin:auto; text-align:left">';
printf( "Feed contains %d products.", $statsArray['total'] );
echo '</p>';
$warning = false;
if (count($statsArray['price']) > 0) {
  $warning = true;
  echo '<p style="margin:auto; text-align:left">';
  printf( "&nbsp;&nbsp;***Warning:*** There are %d products with a price of $0.", $statsArray['price'] );
  echo '</p>';
}
if (count($statsArray['qty']) > 0) {
  $warning = true;
  echo '<p style="margin:auto; text-align:left; padding-bottom:10px; ">';
  printf( "&nbsp;&nbsp;***Warning:*** There are %d products with a quantity of 0.", $statsArray['qty'] );
  echo '</p>';
}
$completed = 'File Completed' . ($warning ? ' (with warnings): ' : ':' );
echo "$completed <a href=\"../" . $OutFile . "\" target=\"_blank\">" . $destination_file . "</a><br>\n";
chmod($OutFile, 0777);

//Start FTP
function ftp_file( $ftpservername, $ftpusername, $ftppassword, $ftpsourcefile, $ftpdirectory, $ftpdestinationfile ) {
   // set up basic connection
   $conn_id = ftp_connect($ftpservername);
   if ( $conn_id == false ) {
	  echo "FTP open connection failed to $ftpservername <BR>\n" ;
	  return false;
   }
   // login with username and password
   $login_result = ftp_login($conn_id, $ftpusername, $ftppassword);
   // check connection
   if ((!$conn_id) || (!$login_result)) {
	  echo "FTP connection has failed!<BR>\n";
	  echo "Attempted to connect to " . $ftpservername . " for user " . $ftpusername . "<BR>\n";
	  return false;
   } else {
	  echo "Connected to " . $ftpservername . ", for user " . $ftpusername . "<BR>\n";
   }
   if ( strlen( $ftpdirectory ) > 0 ) {
	  if (ftp_chdir($conn_id, $ftpdirectory )) {
		 echo "Current directory is now: " . ftp_pwd($conn_id) . "<BR>\n";
	  } else {
		 echo "Couldn't change directory on $ftpservername<BR>\n";
		 return false;
	  }
   }
   ftp_pasv ( $conn_id, true ) ;
   // upload the file
   $upload = ftp_put( $conn_id, $ftpdestinationfile, $ftpsourcefile, FTP_ASCII );
   // check upload status
   if (!$upload) {
	  echo "$ftpservername: FTP upload has failed!<BR>\n";
	  return false;
   } else {
	  echo "Uploaded " . $ftpsourcefile . " to " . $ftpservername . " as " . $ftpdestinationfile . "<BR>\n";
   }
   // close the FTP stream
   ftp_close($conn_id);
   return true;
}
if (FTP_ENABLED)
   ftp_file( "uploads.google.com", FTP_USERNAME, FTP_PASSWORD, $source_file, "", $destination_file);
//End FTP

//  End TIMER
//  ---------
$etimer = explode( ' ', microtime() );
$etimer = $etimer[1] + $etimer[0];
echo '<p style="margin:auto; text-align:center">';
printf( "Script timer: <b>%f</b> seconds.", ($etimer-$stimer) );
echo '</p>';

//  ---------
?>

Now my store is the way I want it - Secure, working well, and good Google Ranks - Thanks to all for the help given.

If you want to see the mods I have installed, then see my profile.

#6 Mort-lemur

  • Community Member
  • 1,045 posts
  • Real Name:Heather
  • Gender:Female
  • Location:UK

Posted 14 January 2012, 20:19

Spent this afternoon looking at this a different way by trying to use SQL IF ELSE commands - but still getting syntax errors !
Now my store is the way I want it - Secure, working well, and good Google Ranks - Thanks to all for the help given.

If you want to see the mods I have installed, then see my profile.

#7 Mort-lemur

  • Community Member
  • 1,045 posts
  • Real Name:Heather
  • Gender:Female
  • Location:UK

Posted 15 January 2012, 08:53

Ok this is how I have tried to alter the sql calculation to make this work, but is causing me syntax errors - can anyone spot a mistake?

$sql = "
SELECT concat( '" . $productURL . "' ,products.products_id) AS product_url,
products_model AS prodModel,
manufacturers.manufacturers_id,
products.products_id AS id,
products_description.products_name AS name,
products_description.products_description AS description,
products.products_quantity AS quantity,
products.products_status AS prodStatus,
products.products_tax_class_id AS tax1,
products.products_weight AS prodWeight, " . $extraFields . "
FORMAT(IFNULL(specials.specials_new_products_price, products.products_price) 2) AS price1,
   if (tax1 == 1)
	   price = price1 * 1.2		 
					 else
	    price = price1,
CONCAT( '" . $imageURL . "' ,products.products_image) AS image_url,
products_to_categories.categories_id AS prodCatID,
categories.parent_id AS catParentID,
categories_description.categories_name AS catName
FROM (categories,
categories_description,
products,
products_description,
products_to_categories)

Now my store is the way I want it - Secure, working well, and good Google Ranks - Thanks to all for the help given.

If you want to see the mods I have installed, then see my profile.

#8 geoffreywalton

  • Community Sponsor
  • 7,731 posts
  • Real Name:Geoffrey Walton
  • Gender:Male
  • Location:Norfolk, UK (close to the centre of the universe)

Posted 15 January 2012, 10:24

Without knowing the value of
" . $extraFields . "

it is a bit of a problem.

Cheers

G
Need help installing add ons/contributions, cleaning a hacked site or a bespoke development, check my profile

Virus Threat Scanner
My Contributions
Basic install answers.
Click here for Contributions / Add Ons.
UK your site.
Site Move.
Basic design info.

For links mentioned in old answers that are no longer here follow this link Useful Threads.

If this post was useful, click the Like This button over there ======>>>>>.

#9 Mort-lemur

  • Community Member
  • 1,045 posts
  • Real Name:Heather
  • Gender:Female
  • Location:UK

Posted 15 January 2012, 10:40

View Postgeoffreywalton, on 15 January 2012, 10:24, said:

Without knowing the value of
" . $extraFields . "

it is a bit of a problem.

Cheers

G

Hi Geoffrey,

That variable is not involved in the Tax calculation, it is used to include (if required) the following data:

Brand
Availability
UPC
MPN
Weight

What Im trying to do is simply inclued some code that says if tax class = 1 then multiply price by 1.2 (Vat) else do not multiply price.

Many Thanks
Now my store is the way I want it - Secure, working well, and good Google Ranks - Thanks to all for the help given.

If you want to see the mods I have installed, then see my profile.

#10 Mort-lemur

  • Community Member
  • 1,045 posts
  • Real Name:Heather
  • Gender:Female
  • Location:UK

Posted 15 January 2012, 14:02

Latest idea was to change the tax calculation define based on the tax class variable using IF & Else - but guess what it didnt work ,,,
Now my store is the way I want it - Secure, working well, and good Google Ranks - Thanks to all for the help given.

If you want to see the mods I have installed, then see my profile.

#11 Mort-lemur

  • Community Member
  • 1,045 posts
  • Real Name:Heather
  • Gender:Female
  • Location:UK

Posted 16 January 2012, 09:19

I really did not think this would prove to be so difficult (both for me and for everyone else),

One more day of trying to get the right result then Ill have to look for an alternative route to resolve this.

Thanks All
Now my store is the way I want it - Secure, working well, and good Google Ranks - Thanks to all for the help given.

If you want to see the mods I have installed, then see my profile.

#12 Mort-lemur

  • Community Member
  • 1,045 posts
  • Real Name:Heather
  • Gender:Female
  • Location:UK

Posted 16 January 2012, 12:53

Grrrr If I didnt need Google shopping so much I would give up on this.....
Now my store is the way I want it - Secure, working well, and good Google Ranks - Thanks to all for the help given.

If you want to see the mods I have installed, then see my profile.

#13 mattjt83

  • Community Member
  • 108 posts
  • Real Name:Matt Toste
  • Gender:Male
  • Location:CA, USA

Posted 16 January 2012, 17:09

Hi Heather,

Sometimes I have found that it is just easier to hire someone in this type of situation. Maybe it will cost a little but it sounds like it would be worth it in your situation. Then you can spend more time focusing on selling items instead of pulling your hair out over the sql statement.

I have dealt with lots of frustating problems in osC so I know how it feels!
Matt

#14 Mort-lemur

  • Community Member
  • 1,045 posts
  • Real Name:Heather
  • Gender:Female
  • Location:UK

Posted 16 January 2012, 19:37

Sadly I think you may be right..
Now my store is the way I want it - Secure, working well, and good Google Ranks - Thanks to all for the help given.

If you want to see the mods I have installed, then see my profile.

#15 Mort-lemur

  • Community Member
  • 1,045 posts
  • Real Name:Heather
  • Gender:Female
  • Location:UK

Posted 17 January 2012, 21:49

Thanks to a suggestion by Sakwoya and some example PHP code he provided I have now managed to get my googlefeed outputs correct. after almost a week of trial and error.

Ill post the solution in the google feeder support thread for any other stores that may have the same problem,
Now my store is the way I want it - Secure, working well, and good Google Ranks - Thanks to all for the help given.

If you want to see the mods I have installed, then see my profile.