[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Что не так в SQL запросе?
Lutsk
Так срабатывает:
...
.
"\n AND ( space >= '$minvalue_space' ) AND ( space <= '$maxvalue_space' )";

а так нет:
$min_space = " AND ( space >= '$minvalue_space' )";
$max_space = " AND ( space <= '$maxvalue_space' )";
...
.
"\n AND access<=$gid AND published='1'"
. "\n" . $min_space . $max_space ;

Голова идет кругом уже. Где ошибка?



Спустя 6 минут, 17 секунд (24.06.2012 - 21:48) Игорь_Vasinsky написал(а):
Покажи что за ... прячется и ошибку запроса.

Спустя 12 минут, 46 секунд (24.06.2012 - 22:01) Lutsk написал(а):
Ладно, хотел бумагу сэкономить. Запрос (Joomla):

// В эти переменные из формы прилетают 2 значения:
$minvalue_space= $database->getEscaped(JArrayHelper::getValue($_REQUEST,'minvalue_space',null));
$maxvalue_space= $database->getEscaped(JArrayHelper::getValue($_REQUEST,'maxvalue_space',null));

// если они прилетели, подставляю в запрос:
$min_space ='';
$max_space ='';
if($minvalue_space !="" && $minvalue_space !=null){ $min_space = " AND ( space >= '$minvalue_space' )"; }
if($maxvalue_space !="" && $maxvalue_price !=null){ $max_space = " AND ( space <= '$maxvalue_space' )"; }

$query = "SELECT id FROM #__estateagent WHERE " . $where . " ("
. "\n ((publish_up >= '0000-00-00' AND publish_up <= '$today') AND publish_down >= '$today')"
. "\n OR ((publish_up >= '0000-00-00' AND publish_up <= '$today' ) AND (publish_down = '0000-00-00' OR publish_down >= '$today'))"
. "\n OR (publish_up = '0000-00-00' AND publish_down = '0000-00-00')"
. "\n )"
. "\n AND access<=$gid AND published='1'"
//. "\n AND ( space >= '$minvalue_space' ) AND ( space <= '$maxvalue_space' )" - так фильтрует
. "\n" . $min_space . $max_space ; // а так - нет

Ошибки не выдает. Просто все записи выводит.

Спустя 7 минут, 55 секунд (24.06.2012 - 22:09) Игорь_Vasinsky написал(а):
а так

$min_space = "( space >= '$minvalue_space' )";
$max_space = "( space <= '$maxvalue_space' )";


$query = "SELECT id FROM #__estateagent WHERE " . $where . " ("
. "\n ((publish_up >= '0000-00-00' AND publish_up <= '$today') AND publish_down >= '$today')"
. "\n OR ((publish_up >= '0000-00-00' AND publish_up <= '$today' ) AND (publish_down = '0000-00-00' OR publish_down >= '$today'))"
. "\n OR (publish_up = '0000-00-00' AND publish_down = '0000-00-00')"
. "\n )"
. "\n AND access<=$gid AND published='1' "
. "\n AND " . $min_space . " AND " . $max_space ;

Спустя 13 минут, 7 секунд (24.06.2012 - 22:22) Lutsk написал(а):
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 '' at line 7

так ошибку выдал. И что тут с кавычками не так blink.gif ?

Спустя 4 минуты, 7 секунд (24.06.2012 - 22:26) Игорь_Vasinsky написал(а):
$query  = "SELECT id FROM #__estateagent WHERE " . $where . " ("
. "\n ((publish_up >= '0000-00-00' AND publish_up <= '$today') AND publish_down >= '$today')"
. "\n OR ((publish_up >= '0000-00-00' AND publish_up <= '$today' ) AND (publish_down = '0000-00-00' OR publish_down >= '$today'))"
. "\n OR (publish_up = '0000-00-00' AND publish_down = '0000-00-00')"
. "\n )"
. "\n AND access<=$gid AND published='1' "
. "\n AND {$min_space} AND {$max_space}";


а так?

Спустя 8 минут, 12 секунд (24.06.2012 - 22:35) Lutsk написал(а):
та же ошибка... А может это быть связано с типом данных? В базе это числовое значение (decimal).

Спустя 6 минут, 18 секунд (24.06.2012 - 22:41) Игорь_Vasinsky написал(а):
покажи echo вот этого

$query  = "SELECT id FROM #__estateagent WHERE " . $where . " ("
. "\n ((publish_up >= '0000-00-00' AND publish_up <= '$today') AND publish_down >= '$today')"
. "\n OR ((publish_up >= '0000-00-00' AND publish_up <= '$today' ) AND (publish_down = '0000-00-00' OR publish_down >= '$today'))"
. "\n OR (publish_up = '0000-00-00' AND publish_down = '0000-00-00')"
. "\n )"
. "\n AND access<=$gid AND published='1' "
. "\n AND {$min_space} AND {$max_space}";

Спустя 7 минут, 52 секунды (24.06.2012 - 22:49) Placido написал(а):
Это точно MySQL, а не MSSQL? Тогда к чему здесь #?
#__estateagent

Я к тому, что все, что справа от # и до конца строки, MySQL воспринимает как комментарий.

Спустя 4 минуты, 54 секунды (24.06.2012 - 22:54) Lutsk написал(а):
SELECT id FROM #__estateagent WHERE id IN (1,3,2,4,5,6,7,8,9,10,11,12) AND  (
((publish_up >= '0000-00-00' AND publish_up <= '2012-06-24') AND publish_down >= '2012-06-24')
OR ((publish_up >= '0000-00-00' AND publish_up <= '2012-06-24' ) AND (publish_down = '0000-00-00' OR publish_down >= '2012-06-24'))
OR (publish_up = '0000-00-00' AND publish_down = '0000-00-00')
)

AND access<=0 AND published='1'
AND ( space >= '0' ) AND

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 '' at line 7 SQL=SELECT id FROM jos_estateagent WHERE id IN (1,3,2,4,5,6,7,8,9,10,11,12) AND ( ((publish_up >= '0000-00-00' AND publish_up <= '2012-06-24') AND publish_down >= '2012-06-24') OR ((publish_up >= '0000-00-00' AND publish_up <= '2012-06-24' ) AND (publish_down = '0000-00-00' OR publish_down >= '2012-06-24')) OR (publish_up = '0000-00-00' AND publish_down = '0000-00-00') ) AND access<=0 AND published='1' AND ( space >= '0' ) AND

Спустя 3 минуты, 42 секунды (24.06.2012 - 22:57) Placido написал(а):
Серый цвет, начиная с #, на мысли не наводит? # нужно убрать - это признак начала комментария в MySQL.

Спустя 8 минут, 59 секунд (24.06.2012 - 23:06) Игорь_Vasinsky написал(а):
Цитата
Имя может начинаться с любого допустимого символа, в частности, с цифры (в этом состоит отличие от правил, принятых во многих других базах данных). Однако имя не может состоять только из цифр.
Не допускается использование в именах символа `.', так как он применяется для расширения формата имени


ТС - у тя в $max_space -- чё нить формируется? чёт не видно в запросе.

это

$min_space ='';
$max_space ='';
if($minvalue_space !="" && $minvalue_space !=null){ $min_space = " AND ( space >= '$minvalue_space' )"; }
if($maxvalue_space !="" && $maxvalue_price !=null){ $max_space = " AND ( space <= '$maxvalue_space' )"; }


замени на

$min_space = !empty($minvalue_space) && $minvalue_space != null ? " AND ( space >= '$minvalue_space' )" : '';
$max_space = !empty($maxvalue_space ) && $maxvalue_price != null ? " AND ( space <= '$maxvalue_space' )" : '';


и запрос формируй так

$query  = "SELECT id FROM #__estateagent WHERE " . $where . " ("
. "\n ((publish_up >= '0000-00-00' AND publish_up <= '$today') AND publish_down >= '$today')"
. "\n OR ((publish_up >= '0000-00-00' AND publish_up <= '$today' ) AND (publish_down = '0000-00-00' OR publish_down >= '$today'))"
. "\n OR (publish_up = '0000-00-00' AND publish_down = '0000-00-00')"
. "\n )"
. "\n AND access<=$gid AND published='1' "
. "\n{$min_space.$max_space}";


что выводит $query и есть ли ошибка?

Спустя 1 минута, 20 секунд (24.06.2012 - 23:08) Lutsk написал(а):
Placido, врядли. Корректно начал работать код такого вида:

if($minvalue_space !="" && $minvalue_space !=null){ $min_space = " AND ( space >= '$minvalue_space' )"; } //тут !empty не срабатывает
if(!empty($maxvalue_space)){ $max_space = " AND ( space <= '$maxvalue_space' )"; }// а тут наоборот

$query = "SELECT id FROM #__estateagent WHERE " . $where . " ("
. "\n ((publish_up >= '0000-00-00' AND publish_up <= '$today') AND publish_down >= '$today')"
. "\n OR ((publish_up >= '0000-00-00' AND publish_up <= '$today' ) AND (publish_down = '0000-00-00' OR publish_down >= '$today'))"
. "\n OR (publish_up = '0000-00-00' AND publish_down = '0000-00-00')"
. "\n )"
. "\n AND access<=$gid AND published='1'"
. "\n" . $min_space . $max_space ;

Но почему так - для меня загадка.

Спустя 36 секунд (24.06.2012 - 23:08) Игорь_Vasinsky написал(а):
Placido
это форум подсветил же.

Спустя 2 минуты, 5 секунд (24.06.2012 - 23:10) Игорь_Vasinsky написал(а):
я подкорректировал

Спустя 15 минут, 46 секунд (24.06.2012 - 23:26) Lutsk написал(а):
Игорь_Vasinsky, строка
. "\n{$min_space.$max_space}";
в запросе выдает ошибку:
Parse error: syntax error, unexpected '.', expecting '}'.
Не катит.

Спустя 2 минуты, 56 секунд (24.06.2012 - 23:29) Игорь_Vasinsky написал(а):
и без {} ???

Спустя 4 минуты, 9 секунд (24.06.2012 - 23:33) Lutsk написал(а):
а без - не фильтрует. Только если в условиях нижнее значение без !empty, а верхнее - с ним. Завтра на свежую голову буду думать...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.