Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Головоломка

976
27 февраля 2011 года
mikhalych
198 / / 04.01.2009
Кто может подсказать где тут ошибка ?

 
Код:
CREATE FUNCTION GetDays(currentDay DATETIME)
RETURNS INT(10)DETERMINISTIC
RETURN COUNT(id) FROM statistics WHERE DATE(visit_date)=DATE(currentDay)
:confused:
385
27 февраля 2011 года
SomewherSomehow
477 / / 25.07.2004
В пятой строке!
Вы субд называйте а? чтоб люди зря голову не ломали, в правилах же написано...
976
28 февраля 2011 года
mikhalych
198 / / 04.01.2009
Цитата: SomewherSomehow
В пятой строке!



тут нет пятой строки

Цитата: SomewherSomehow
Вы субд называйте а? чтоб люди зря голову не ломали, в правилах же написано...


МусКул, сорри.

Попробовал и вот так:

Код:
EXPLAIN
delimiter $$

 CREATE FUNCTION GetDayCount(currentDay DATETIME)
      RETURNS INT
      READS SQL DATA
 BEGIN
      DECLARE visit_count INT;

      SELECT COUNT(*)
           INTO visit_count
        FROM statistics
       WHERE DATE(visit_date)=DATE(currentDay);

      RETURN(visit_count);

 END$$


Не помогает

Вот скриншот ошибки


Во вложении есть дамп таблицы с данными.
277
28 февраля 2011 года
arrjj
1.7K / / 26.01.2011
хз у меня работает такая процедура.
Код:
mysql> create table test ( id int not null auto_increment primary key, price int default 10 );
Query OK, 0 rows affected (0.07 sec)

mysql> insert into test (price) values (1),(2),(3),(4),(5);
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> alter table test add somecolumn datetime default '2009-04-02 17:54:58';
Query OK, 5 rows affected (0.09 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from test;
+----+-------+---------------------+
| id | price | somecolumn          |
+----+-------+---------------------+
|  1 |     1 | 2009-04-02 17:54:58 |
|  2 |     2 | 2009-04-02 17:54:58 |
|  3 |     3 | 2009-04-02 17:54:58 |
|  4 |     4 | 2009-04-02 17:54:58 |
|  5 |     5 | 2009-04-02 17:54:58 |
+----+-------+---------------------+
5 rows in set (0.00 sec)

mysql> delimiter //
mysql> create function blah(need int,param2 datetime) returns int reads sql data begin declare zz int; select count(*) into zz from test where price=need and date(somecolumn)=date(param2); return zz; end//
Query OK, 0 rows affected (0.00 sec)

mysql>delimiter ;
mysql> select blah(3,'2009-04-02 17:54:58');
+-------------------------------+
| blah(3,'2009-04-02 17:54:58') |
+-------------------------------+
|                             1 |
+-------------------------------+
1 row in set (0.00 sec)
277
28 февраля 2011 года
arrjj
1.7K / / 26.01.2011
да и как в первом посте работает.
Попробуйте не через веб-морду (т.к. она походу игнорирует delimiter и разбирает запросы по ';') а создать sql текстовый файлик и выполнить скрипт из файла (в phpMyAdmin есть такая функция)
976
28 февраля 2011 года
mikhalych
198 / / 04.01.2009
И вправде работает через Командную Строку.
Но не работает ни через ПхпМайАдмин ни через сам ПХП в коде.

Чё делать ?
Мне нужно эту функцию создать на серваке а не на локалке.
Помогите люди добрые...
277
28 февраля 2011 года
arrjj
1.7K / / 26.01.2011
прекрасно через пхп работает:
Код:
<?php
mysql_connect("localhost","root","1234");
mysql_select_db("test");
mysql_query("
create table test
(
id int not null auto_increment primary key,
price int default 10,
somecolumn datetime default '2009-04-02 17:54:58'
);
"
);
echo mysql_error();
mysql_query("insert into test(price) values (1),(2),(3),(4),(5),(6);
"
);
echo mysql_error();
mysql_query("
create function blah(need int,param2 datetime)
returns int
reads sql data
begin declare zz int;
select count(*) into zz from test where price=need and date(somecolumn)=date(param2);
return zz;
end;
"
);
echo mysql_error();
$res=mysql_query("
select *from test;"
);
echo mysql_error();
while($row=mysql_fetch_row($res))
{
for($i=0;$i<count($row);$i++)
    echo $row[$i].' ';
echo '<br />';
}
$res=mysql_query("
select blah(3,'2009-04-02 17:54:58');"
);
echo mysql_error();
while($row=mysql_fetch_row($res))
{
for($i=0;$i<count($row);$i++)
    echo $row[$i].' ';
echo '<br />';
}
mysql_query("drop function blah;
"
);
echo mysql_error();
mysql_query("drop table test;
"
);
echo mysql_error();
?>
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог