Pagina 1 di 1

Filter special offer by category e QUERY B2B

Inviato: 29/10/2010, 11:03
da giammi73
ciao chi mi da una mano a integrarle?

Quesri originale

Codice: Seleziona tutto

  //TotalB2B start
  if (!isset($customer_id)) $customer_id = 0;
  $customer_group = tep_get_customers_groups_id();
  $specials_query_raw = "select DISTINCT p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, p.products_image,s.specials_new_products_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_SPECIALS . " s where p.products_status = '1' and s.products_id = p.products_id and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and s.status = '1' and ((s.customers_id = '" . $customer_id . "' and s.customers_groups_id = '0') or (s.customers_id = '0' and s.customers_groups_id = '" . $customer_group . "') or (s.customers_id = '0' and s.customers_groups_id = '0')) order by s.specials_date_added DESC";

//TotalB2B end

  $specials_split = new splitPageResults($specials_query_raw, MAX_DISPLAY_SPECIAL_PRODUCTS);

  if (($specials_split->number_of_rows > 0) && ((PREV_NEXT_BAR_LOCATION == '1') || (PREV_NEXT_BAR_LOCATION == '2'))) {

e quella della contrib Filter special offer by category

Codice: Seleziona tutto

$specials_query_raw = "select p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, p.products_image, s.specials_new_products_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_SPECIALS . " s, " . TABLE_CATEGORIES . " c where p2c.categories_id = c.categories_id and p.products_status = '1' and p.products_quantity > 0 and p.products_id = p2c.products_id and s.products_id = p.products_id and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and s.status = '1'";
  
  if($categories_id > 0)
	$specials_query_raw .= " and p2c.categories_id in (".tep_get_categories_ids($categories_id).$categories_id.")";
	
  $specials_query_raw .= " order by p2c.categories_id, s.specials_date_added DESC";


chi riesce a integrarle?

granzie

Re: Filter special offer by category e QUERY B2B

Inviato: 29/10/2010, 12:02
da dynamo
dovrebbe funzionare

Codice: Seleziona tutto

  $specials_query_raw = "select DISTINCT p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, p.products_image, s.specials_new_products_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_SPECIALS . " s, " . TABLE_CATEGORIES . " c where p.products_status = '1' and pd.language_id = '" . (int)$languages_id . "' and s.status = '1' and s.products_id = p.products_id and p.products_id = pd.products_id and ((s.customers_id = '" . $customer_id . "' and s.customers_groups_id = '0') or (s.customers_id = '0' and s.customers_groups_id = '" . $customer_group . "') or (s.customers_id = '0' and s.customers_groups_id = '0')) and  p2c.categories_id = c.categories_id and p.products_quantity > 0 and p.products_id = p2c.products_id ";
  
    if($categories_id > 0)
   $specials_query_raw .= " and p2c.categories_id in (".tep_get_categories_ids($categories_id).$categories_id.")";
   
  $specials_query_raw .= " order by p2c.categories_id, s.specials_date_added DESC";

Re: Filter special offer by category e QUERY B2B

Inviato: 03/11/2010, 20:03
da giammi73
mi da questo errore

Codice: Seleziona tutto

1064 - 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 'and p.products_quantity > 0 and p.products_id = p2c.products_id' at line 1

select count(*) as total from products p, products_description pd, products_to_categories p2c, specials s, categories c where p.products_status = '1' and pd.language_id = '4' and s.status = '1' and s.products_id = p.products_id and p.products_id = pd.products_id and ((s.customers_id = '0' and s.customers_groups_id = '0') or (s.customers_id = '0' and s.customers_groups_id = '') or (s.customers_id = '0' and s.customers_groups_id = '0')) and p2c.categories_id = c.categories_id and and p.products_quantity > 0 and p.products_id = p2c.products_id 

Re: Filter special offer by category e QUERY B2B

Inviato: 04/11/2010, 0:53
da dynamo
tralasciando che quello che hai postato tu non è il codice che ti ho dato io :roll:

un minimo di conoscenze di sql le devi avere se vuoi modificare qualcosa in osc e anche saper riconoscere gli errori non sarebbe una brutta cosa...

prima di

Codice: Seleziona tutto

p.products_quantity > 0 and p.products_id = p2c.products_id p.products_quantity > 0 and p.products_id = p2c.products_id 
hai 2 "and" eliminane uno ;)

Re: Filter special offer by category e QUERY B2B

Inviato: 04/11/2010, 10:19
da giammi73
risolta una cosa ne esce un' altra...

Codice: Seleziona tutto

1064 - 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 '-12, 12' at line 1

select DISTINCT p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, p.products_image, s.specials_new_products_price from products p, products_description pd, products_to_categories p2c, specials s, categories c where p.products_status = '1' and pd.language_id = '4' and s.status = '1' and s.products_id = p.products_id and p.products_id = pd.products_id and ((s.customers_id = '0' and s.customers_groups_id = '0') or (s.customers_id = '0' and s.customers_groups_id = '') or (s.customers_id = '0' and s.customers_groups_id = '0')) and p2c.categories_id = c.categories_id and p.products_quantity > 0 and p.products_id = p2c.products_id order by p2c.categories_id, s.specials_date_added DESC limit -12, 12

[TEP STOP]

Re: Filter special offer by category e QUERY B2B

Inviato: 04/11/2010, 11:19
da dynamo
leggiti qualche guida sul mysql perchè lì hai sbagliato ad impostare i valori per "limit"

Re: Filter special offer by category e QUERY B2B

Inviato: 04/11/2010, 11:24
da giammi73
scusa
ma ......
una cosa...

prima scaghi una query e dici che ho sbagliato io...
poi mi dici di leggermi una guida a mysql....
dopo che la query che hai fatto non funge....

leggitela pure tu la guida ...
che non mi sembri molto capace di dare aiuti..

e fai pure il fenomeno

mah....

Re: Filter special offer by category e QUERY B2B

Inviato: 04/11/2010, 13:56
da dynamo
giammi73 ha scritto:scusa
ma ......
una cosa...

prima scaghi una query e dici che ho sbagliato io...
poi mi dici di leggermi una guida a mysql....
dopo che la query che hai fatto non funge....

leggitela pure tu la guida ...
che non mi sembri molto capace di dare aiuti..

e fai pure il fenomeno

mah....
o.O
andiamo con ordine... posti 2 query e chiedi di unirtele... e te l'ho fatto...

poi posti un'altra query dicendo che c'è un errore, te lo risolvo e ti faccio notare che la query dove hai l'errore non è quella che ti ho postato io... da come scrivevi sembrava che fosse la stessa e che avessi sbagliato io a farti la query (possibile)

infine posti un'altra query ancora sempre diversa, io ti dico che leggerti una guida sql dopo la tua 3° richiesta d'aiuto sempre sul discorso sql (e visto che oscommerce si basa sull'sql e DEVI impararlo per farti le modifiche che vuoi) mi vieni a dire che non sono bravo ad aiutarti???

allora facciamo così mi PAGHI e ti risolvo tutti i tuoi problemi :mrgreen:


ora per venire al tuo problema... la voce "limit" non accoglie valori negativi quindi non puoi fare -12,12

leggi qui per altre info
http://www.parlandosparlando.com/view.p ... /whoisit_1

Re: Filter special offer by category e QUERY B2B

Inviato: 05/11/2010, 12:11
da giammi73
SCUSA ma a me sembra che l'errore che imputavi a me..
dynamo ha scritto:dovrebbe funzionare

$specials_query_raw = "select DISTINCT p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, p.products_image, s.specials_new_products_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_SPECIALS . " s, " . TABLE_CATEGORIES . " c where p.products_status = '1' and pd.language_id = '" . (int)$languages_id . "' and s.status = '1' and s.products_id = p.products_id and p.products_id = pd.products_id and ((s.customers_id = '" . $customer_id . "' and s.customers_groups_id = '0') or (s.customers_id = '0' and s.customers_groups_id = '" . $customer_group . "') or (s.customers_id = '0' and s.customers_groups_id = '0')) and p2c.categories_id = c.categories_id and and p.products_quantity > 0 and p.products_id = p2c.products_id ";

if($categories_id > 0)
$specials_query_raw .= " and p2c.categories_id in (".tep_get_categories_ids($categories_id).$categories_id.")";

$specials_query_raw .= " order by p2c.categories_id, s.specials_date_added DESC";

o sono io che non ho capito quello che scrivi?

poi io ti pagherei pure...
ma come dire
se il risultato e' una query che non funge posso pagarti coi soldi del monopoli?
:D

Re: Filter special offer by category e QUERY B2B

Inviato: 05/11/2010, 12:31
da giammi73
la query che crea quel valore negativo e' questa..

$specials_split = new splitPageResults($specials_query_raw, MAX_DISPLAY_SPECIAL_PRODUCTS);

ma probabilmente il problema deriva da
$specials_query_raw
cioe' la query che ha fatto tu..
perche anche se levo il max display e metto un numero mi duplica il numero con un valore negativo e uno positivo...

Re: Filter special offer by category e QUERY B2B

Inviato: 05/11/2010, 13:03
da dynamo
allora... discorso "and and"
riconosco che nel tagli e incolla ho scritto due and... però tu non hai postato la stessa query che ti ho fatto io :roll: come faccio a sapere che è la mia???

la mia inizia con

Codice: Seleziona tutto

  $specials_query_raw = "select DISTINCT p.products_id, pd.products_name,
quella postata da te con

Codice: Seleziona tutto

select count(*) as total from products p
sono due cose differenti :roll:

ora veniamo al problema "limit"

sicuro che hai postato tutto il codice della contrib Filter special offer by category ???
non dice nulla sullo split???

hai mantenuto

Codice: Seleziona tutto

  if (!isset($customer_id)) $customer_id = 0;
  $customer_group = tep_get_customers_groups_id();
prima di scrivere la query?

e tra le altre cose...
nel file catalog/includes/classes/split_page_results.php
assicurati che sia uguale a questo codice

Codice: Seleziona tutto

    function splitPageResults($query, $max_rows, $count_key = '*', $page_holder = 'page') {
      global $HTTP_GET_VARS, $HTTP_POST_VARS;

      $this->sql_query = $query;
      $this->page_name = $page_holder;

      if (isset($HTTP_GET_VARS[$page_holder])) {
        $page = $HTTP_GET_VARS[$page_holder];
      } elseif (isset($HTTP_POST_VARS[$page_holder])) {
        $page = $HTTP_POST_VARS[$page_holder];
      } else {
        $page = '';
      }

      if (empty($page) || !is_numeric($page)) $page = 1;
      $this->current_page_number = $page;

      $this->number_of_rows_per_page = $max_rows;

      $pos_to = strlen($this->sql_query);
      $pos_from = strpos($this->sql_query, ' from', 0);

      $pos_group_by = strpos($this->sql_query, ' group by', $pos_from);
      if (($pos_group_by < $pos_to) && ($pos_group_by != false)) $pos_to = $pos_group_by;

      $pos_having = strpos($this->sql_query, ' having', $pos_from);
      if (($pos_having < $pos_to) && ($pos_having != false)) $pos_to = $pos_having;

      $pos_order_by = strpos($this->sql_query, ' order by', $pos_from);
      if (($pos_order_by < $pos_to) && ($pos_order_by != false)) $pos_to = $pos_order_by;

      if (strpos($this->sql_query, 'distinct') || strpos($this->sql_query, 'group by')) {
        $count_string = 'distinct ' . tep_db_input($count_key);
      } else {
        $count_string = tep_db_input($count_key);
      }

      $count_query = tep_db_query("select count(" . $count_string . ") as total " . substr($this->sql_query, $pos_from, ($pos_to - $pos_from)));
      $count = tep_db_fetch_array($count_query);

      $this->number_of_rows = $count['total'];

      $this->number_of_pages = ceil($this->number_of_rows / $this->number_of_rows_per_page);

      if ($this->current_page_number > $this->number_of_pages) {
        $this->current_page_number = $this->number_of_pages;
      }

      $offset = ($this->number_of_rows_per_page * ($this->current_page_number - 1));

      $this->sql_query .= " limit " . max($offset, 0) . ", " . $this->number_of_rows_per_page;
    }
perchè sembrerebbe che a te non "funzioni" questa ultima riga

Codice: Seleziona tutto

  $this->sql_query .= " limit " . max($offset, 0) . ", " . $this->number_of_rows_per_page;
che non fa altro che impostare il limit da 0 al valore che hai impostato te in admin...