CREATE FUNCTION GetDays(currentDay DATETIME)
RETURNS INT(10)DETERMINISTIC
RETURN COUNT(id) FROM statistics WHERE DATE(visit_date)=DATE(currentDay)
Головоломка
Код:
Вы субд называйте а? чтоб люди зря голову не ломали, в правилах же написано...
Цитата: 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$$
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$$
Не помогает
Вот скриншот ошибки
Во вложении есть дамп таблицы с данными.
Код:
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)
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)
Попробуйте не через веб-морду (т.к. она походу игнорирует delimiter и разбирает запросы по ';') а создать sql текстовый файлик и выполнить скрипт из файла (в phpMyAdmin есть такая функция)
Но не работает ни через ПхпМайАдмин ни через сам ПХП в коде.
Чё делать ?
Мне нужно эту функцию создать на серваке а не на локалке.
Помогите люди добрые...
Код:
<?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();
?>
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();
?>