SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.04.2016 16:12:08

swess
Участник
Зарегистрирован: 26.04.2016
Сообщений: 7

You have an error in your SQL syntax

Помогите найти причину ошибки - понял из текста, что проблема в синтаксисе, но в чем именно не погнимаю

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 '-20,20' at line 41


SELECT DISTINCT * FROM (

                SELECT p.`id_product` , ppac.`id_attribute` , ppac.`id_product_attribute` , ppa.`quantity` , i.`id_image` , pl.`description_short` , pl.`link_rewrite` , pl.`name`

FROM

                `pstore_product` AS p,

                `pstore_product_attribute` AS ppa,

                `pstore_product_attribute_combination` AS ppac,

                `pstore_product_lang` AS pl,

                `pstore_product_attribute_image` AS pai,

                `pstore_image` AS i

                WHERE

               

                ppac.`id_attribute` = 24

AND pai.`id_product_attribute` = ppac.`id_product_attribute`

AND ppa.`id_product_attribute` = ppac.`id_product_attribute`

AND p.`id_product` = ppa.`id_product`

AND ppa.`quantity` > 0

AND i.`id_product` = p.`id_product`

AND i.`id_image` = pai.`id_image`

AND p.`id_product` = pl.`id_product`

AND p.`active` =1

AND pl.`id_lang` =1 GROUP BY p.`id_product` ) AS tmp GROUP BY tmp.`id_product` HAVING COUNT(*) = 1 ORDER BY tmp.`
 

Неактивен

 

#2 26.04.2016 16:45:38

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: You have an error in your SQL syntax

Ну во всяком случае

ORDER BY tmp.`

это некорректно.

либо убрать сортировку надо, либо нормально прописать
ORDER BY tmp.`НАЗВАНИЕ_ПОЛЯ`

А вообще запрос Вы не полностью привели.

Ругань идет на

use near '-20,20' at line 41

а у Вас в запросе такого нет.

Приведите запрос полностью?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 26.04.2016 18:05:19

swess
Участник
Зарегистрирован: 26.04.2016
Сообщений: 7

Re: You have an error in your SQL syntax

да - в ошибке обрезанный кусок почему-то
вот кусок кода - который вызывает данную ошибку



public function attribute_id($id_lang, $attributes, $count = false, $pageNumber = 1, $pageSize = 10, $orderBy = 'name', $orderWay = 'ASC')

    {

        if (!is_numeric($pageNumber) OR !is_numeric($pageSize)

        OR !Validate::isBool($count) OR !Validate::isValidSearch($tag))

            die(Tools::displayError());

       

        if ($pageNumber < 0) $pageNumber = 0;

        if ($pageSize < 1) $pageSize = 10;



        if ($orderBy == 'position') {

            $orderBy = 'name';

        }



        $counter = 0;

        foreach ($attributes AS $attribute) {

            ++$counter;

        }

       

        $query_begin = 'SELECT DISTINCT * FROM (';

   

        $i = $counter;

   

        if ($i==1) {

            $query_end = ') AS tmp GROUP BY tmp.`id_product` HAVING COUNT(*) = ' . $counter . ' ORDER BY tmp.`name`  LIMIT '.((intval($pageNumber) - 1) * intval($pageSize)).','.intval($pageSize);

        } else {

            $query_end = ') AS tmp GROUP BY tmp.`id_product_attribute` HAVING COUNT(*) = ' . $counter . ' ORDER BY tmp.`name`  LIMIT '.((intval($pageNumber) - 1) * intval($pageSize)).','.intval($pageSize);                

        }



        $attr = '';

   



        foreach ($attributes AS $attribute) {

            //if ($count) {

                $attr = $attr . '

                SELECT p.`id_product` , ppac.`id_attribute` , ppac.`id_product_attribute` , ppa.`quantity` , i.`id_image` , pl.`description_short` , pl.`link_rewrite` , pl.`name`

FROM

                `'
._DB_PREFIX_.'product` AS p,

                `'
._DB_PREFIX_.'product_attribute` AS ppa,

                `'
._DB_PREFIX_.'product_attribute_combination` AS ppac,

                `'
._DB_PREFIX_.'product_lang` AS pl,

                `'
._DB_PREFIX_.'product_attribute_image` AS pai,

                `'
._DB_PREFIX_.'image` AS i

                WHERE

               

                ppac.`id_attribute` = '
. $attribute .'

AND pai.`id_product_attribute` = ppac.`id_product_attribute`

AND ppa.`id_product_attribute` = ppac.`id_product_attribute`

AND p.`id_product` = ppa.`id_product`

AND ppa.`quantity` > 0

AND i.`id_product` = p.`id_product`

AND i.`id_image` = pai.`id_image`

AND p.`id_product` = pl.`id_product`

AND p.`active` =1

AND pl.`id_lang` =1'
;

if ($counter == 1) {

                $attr = $attr . ' GROUP BY p.`id_product` ';

            }



            if ($i != 1) {

                $attr = $attr . ' UNION ';

            }



            --$i;

        }





        $query = $query_begin . $attr . $query_end;

       

        $result = Db::getInstance()->ExecuteS($query);



        if ($count) {

            return sizeof($result);

        }



        if (!$result) {

            return false;

        }



        return Product::getProductsProperties($id_lang, $result);

    }
 

Неактивен

 

#4 26.04.2016 18:08:02

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: You have an error in your SQL syntax

Это прекрасно, но лучше приведите sql-код, а не php-шный.

После строки

$query = $query_begin . $attr . $query_end;
распечатайте значение, например, в файл, или на экран - и пришлите сюда.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 26.04.2016 18:20:08

swess
Участник
Зарегистрирован: 26.04.2016
Сообщений: 7

Re: You have an error in your SQL syntax


SELECT DISTINCT * FROM ( SELECT p.`id_product` , ppac.`id_attribute` , ppac.`id_product_attribute` , ppa.`quantity` , i.`id_image` , pl.`description_short` , pl.`link_rewrite` , pl.`name` FROM `pstore_product` AS p, `pstore_product_attribute` AS ppa, `pstore_product_attribute_combination` AS ppac, `pstore_product_lang` AS pl, `pstore_product_attribute_image` AS pai, `pstore_image` AS i WHERE ppac.`id_attribute` = 22 AND pai.`id_product_attribute` = ppac.`id_product_attribute` AND ppa.`id_product_attribute` = ppac.`id_product_attribute` AND p.`id_product` = ppa.`id_product` AND ppa.`quantity` > 0 AND i.`id_product` = p.`id_product` AND i.`id_image` = pai.`id_image` AND p.`id_product` = pl.`id_product` AND p.`active` =1 AND pl.`id_lang` =1 GROUP BY p.`id_product` ) AS tmp GROUP BY tmp.`id_product` HAVING COUNT(*) = 1 ORDER BY tmp.`name` LIMIT 0,10
 

Неактивен

 

#6 26.04.2016 18:50:29

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: You have an error in your SQL syntax

Итого, что получается:

SELECT
    DISTINCT *
FROM
    (
SELECT
    p.`id_product` ,
    ppac.`id_attribute` ,
    ppac.`id_product_attribute` ,
    ppa.`quantity` ,
    i.`id_image` ,
    pl.`description_short` ,
    pl.`link_rewrite` ,
    pl.`name`
FROM
    `pstore_product` AS p,
    `pstore_product_attribute` AS ppa,
    `pstore_product_attribute_combination` AS ppac,
    `pstore_product_lang` AS pl,
    `pstore_product_attribute_image` AS pai,
    `pstore_image` AS i
WHERE
    ppac.`id_attribute` = 22
    AND pai.`id_product_attribute` = ppac.`id_product_attribute`
    AND ppa.`id_product_attribute` = ppac.`id_product_attribute`
    AND p.`id_product` = ppa.`id_product`
    AND ppa.`quantity` > 0
    AND i.`id_product` = p.`id_product`
    AND i.`id_image` = pai.`id_image`
    AND p.`id_product` = pl.`id_product`
    AND p.`active` =1
    AND pl.`id_lang` =1
GROUP BY
    p.`id_product`
    ) AS tmp
GROUP BY
    tmp.`id_product`
HAVING
    COUNT(*) = 1
ORDER BY
    tmp.`name`
LIMIT
    0,10    
 


Не видно оснований для той ошибки, что Вы привели, я про
syntax to use near '-20,20' at line 41

Что mysql-сервер говорит, если подать ему именно тот запрос, который Вы привели?

И приведите еще результаты запросов

show create table `pstore_product`;
show create table `pstore_product_attribute`;
show create table `pstore_product_attribute_combination`;
show create table `pstore_product_lang`;
show create table `pstore_product_attribute_image`;
show create table `pstore_image`;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 26.04.2016 19:14:09

swess
Участник
Зарегистрирован: 26.04.2016
Сообщений: 7

Re: You have an error in your SQL syntax

извиняюсь - каким образом подать mysql-серверу данный запрос? для вывода предыдущего я вставил в php строку

echo $query; exit;

Неактивен

 

#8 26.04.2016 19:19:11

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: You have an error in your SQL syntax

Проще всего через консоль mysql (mysql.exe в windows), или каким-нибудь phpmyadmin/mysql query browser'om, в общем любой утилитой, которая обеспечивает взаимодействие с mysql


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 26.04.2016 22:02:33

swess
Участник
Зарегистрирован: 26.04.2016
Сообщений: 7

Re: You have an error in your SQL syntax

Table    Create Table
pstore_product    CREATE TABLE `pstore_product` (
 `id_product` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `id_supplier` int(10) unsigned DEFAULT NULL,
 `id_manufacturer` int(10) unsigned DEFAULT NULL,
 `id_tax` int(10) unsigned NOT NULL,
 `id_category_default` int(10) unsigned DEFAULT NULL,
 `id_color_default` int(10) unsigned DEFAULT NULL,
 `on_sale` tinyint(1) unsigned NOT NULL DEFAULT '0',
 `ean13` varchar(13) DEFAULT NULL,
 `ecotax` decimal(17,2) NOT NULL DEFAULT '0.00',
 `quantity` int(10) unsigned NOT NULL DEFAULT '0',
 `price` decimal(20,6) NOT NULL DEFAULT '0.000000',
 `wholesale_price` decimal(20,6) NOT NULL DEFAULT '0.000000',
 `reduction_price` decimal(17,2) DEFAULT NULL,
 `reduction_percent` float DEFAULT NULL,
 `reduction_from` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
 `reduction_to` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
 `reference` varchar(32) DEFAULT NULL,
 `supplier_reference` varchar(32) DEFAULT NULL,
 `location` varchar(64) DEFAULT NULL,
 `weight` float NOT NULL DEFAULT '0',
 `out_of_stock` int(10) unsigned NOT NULL DEFAULT '2',
 `quantity_discount` tinyint(1) DEFAULT '0',
 `customizable` tinyint(2) NOT NULL DEFAULT '0',
 `uploadable_files` tinyint(4) NOT NULL DEFAULT '0',
 `text_fields` tinyint(4) NOT NULL DEFAULT '0',
 `active` tinyint(1) unsigned NOT NULL DEFAULT '0',
 `indexed` tinyint(1) NOT NULL DEFAULT '0',
 `date_add` datetime NOT NULL,
 `date_upd` datetime NOT NULL,
 PRIMARY KEY (`id_product`),
 KEY `product_supplier` (`id_supplier`),
 KEY `product_manufacturer` (`id_manufacturer`),
 KEY `id_tax` (`id_tax`),
 KEY `id_category_default` (`id_category_default`),
 KEY `id_color_default` (`id_color_default`),
 KEY `date_add` (`date_add`)
) ENGINE=MyISAM AUTO_INCREMENT=60 DEFAULT CHARSET=utf8


pstore_product_attribute    CREATE TABLE `pstore_product_attribute` (
 `id_product_attribute` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `id_product` int(10) unsigned NOT NULL,
 `reference` varchar(32) DEFAULT NULL,
 `supplier_reference` varchar(32) DEFAULT NULL,
 `location` varchar(64) DEFAULT NULL,
 `ean13` varchar(13) DEFAULT NULL,
 `wholesale_price` decimal(20,6) NOT NULL DEFAULT '0.000000',
 `price` decimal(17,2) NOT NULL DEFAULT '0.00',
 `ecotax` decimal(17,2) NOT NULL DEFAULT '0.00',
 `quantity` int(10) unsigned NOT NULL DEFAULT '0',
 `weight` float NOT NULL DEFAULT '0',
 `default_on` tinyint(1) unsigned NOT NULL DEFAULT '0',
 PRIMARY KEY (`id_product_attribute`),
 KEY `product_attribute_product` (`id_product`),
 KEY `reference` (`reference`),
 KEY `supplier_reference` (`supplier_reference`),
 KEY `product_default` (`id_product`,`default_on`),
 KEY `id_product_id_product_attribute` (`id_product_attribute`,`id_product`)
) ENGINE=MyISAM AUTO_INCREMENT=44 DEFAULT CHARSET=utf8


pstore_product_attribute_combination    CREATE TABLE `pstore_product_attribute_combination` (
 `id_attribute` int(10) unsigned NOT NULL,
 `id_product_attribute` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id_attribute`,`id_product_attribute`),
 KEY `id_product_attribute` (`id_product_attribute`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8



pstore_product_lang    CREATE TABLE `pstore_product_lang` (
 `id_product` int(10) unsigned NOT NULL,
 `id_lang` int(10) unsigned NOT NULL,
 `description` text,
 `description_short` text,
 `link_rewrite` varchar(128) NOT NULL,
 `meta_description` varchar(255) DEFAULT NULL,
 `meta_keywords` varchar(255) DEFAULT NULL,
 `meta_title` varchar(128) DEFAULT NULL,
 `name` varchar(128) NOT NULL,
 `available_now` varchar(255) DEFAULT NULL,
 `available_later` varchar(255) DEFAULT NULL,
 UNIQUE KEY `product_lang_index` (`id_product`,`id_lang`),
 KEY `id_lang` (`id_lang`),
 KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

\
pstore_product_attribute_image    CREATE TABLE `pstore_product_attribute_image` (
 `id_product_attribute` int(10) unsigned NOT NULL,
 `id_image` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id_product_attribute`,`id_image`),
 KEY `id_image` (`id_image`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


pstore_image    CREATE TABLE `pstore_image` (
 `id_image` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `id_product` int(10) unsigned NOT NULL,
 `position` tinyint(2) unsigned NOT NULL DEFAULT '0',
 `cover` tinyint(1) unsigned NOT NULL DEFAULT '0',
 PRIMARY KEY (`id_image`),
 KEY `image_product` (`id_product`),
 KEY `product_position` (`id_product`,`position`),
 KEY `id_product_cover` (`id_product`,`cover`)
) ENGINE=MyISAM AUTO_INCREMENT=343 DEFAULT CHARSET=utf8

Неактивен

 

#10 26.04.2016 22:19:26

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: You have an error in your SQL syntax

Вот было у меня ощущение, что обманываете бедных aдминов!
Прекрасно Ваш запрос отрабатывает, можете сами убедиться wink.

Приведите все же тот, который с ошибкой падает (подсказка: в нем должно быть -20,20).
Разве что заменить 0,10 после limit на -20,20...
Но тогда надо разбираться с тем кодом, который собирает этот запрос. Не должны быть аргументы limit отрицательными, ни первый ни второй.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#11 26.04.2016 22:59:38

swess
Участник
Зарегистрирован: 26.04.2016
Сообщений: 7

Re: You have an error in your SQL syntax

ошибка которая выдается на странице собственно приведена в топике - а кто ее провоцирует вопрос другой - видимо каким-то образом код делает лимит отрицательным - в любом случае спасибо за помощь

Неактивен

 

#12 26.04.2016 23:03:22

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: You have an error in your SQL syntax

Смотрите код, который составляет этот запрос

((intval($pageNumber) - 1) * intval($pageSize)).','.intval($pageSize);

Видимо приходит $pageNumber равный нулю, что-то такое, вот и получается -20.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#13 26.04.2016 23:18:29

swess
Участник
Зарегистрирован: 26.04.2016
Сообщений: 7

Re: You have an error in your SQL syntax

Да так и есть, при $pageNumber = 0 и получается данная ошибка, при том если $pageNumber сделать = 1 - запрос не выводит ничего - видимо кривой код - еще раз спасибо за помощь

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson