Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите написать MySql функцию?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
nkl
Отправлено: 29 Июля, 2013 - 18:42:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Я только начинаю прогрмаммировть в MySql поэтому еще слабо знаю синтаксис. Подскажите дрогие мои, как объявить переменную в MySql? Например, я хочу сделать так:

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE DEFINER = 'root'@'%'
  3. FUNCTION insertMegaRow(Param1 bigint UNSIGNED, Param2 int)
  4. RETURNS INT
  5. BEGIN
  6. INSERT INTO table1 (column1) VALUE (Param1);
  7. SET lastInsertId = SELECT LAST_INSERT_ID;
  8. INSERT INTO table2 (column1, column2) VALUE(lastInsertId, Param2);
  9. RETURN 1;
  10. END


Как мне получить результат выборки SELECT LAST_INSERT_ID в переменную и потом использовать её значение для вставки в следующем запросе?

(Отредактировано автором: 29 Июля, 2013 - 18:43:39)

 
 Top
EuGen Администратор
Отправлено: 29 Июля, 2013 - 19:00:02
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




nkl пишет:
SET lastInsertId = SELECT LAST_INSERT_ID;
INSERT INTO table2 (column1, column2) VALUE(lastInsertId, Param2);

CODE (SQL):
скопировать код в буфер обмена
  1. SET @lastInsertId = SELECT LAST_INSERT_ID();
  2. INSERT INTO table2 (column1, column2) VALUES(@lastInsertId, Param2);

(можно и без промежуточной переменной)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
nkl
Отправлено: 29 Июля, 2013 - 19:06:02
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




а примерчик можно? Подмигивание
 
 Top
EuGen Администратор
Отправлено: 29 Июля, 2013 - 19:25:31
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




nkl пишет:
а примерчик можно?

Синтаксис я привёл в комментарии выше.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
nkl
Отправлено: 29 Июля, 2013 - 19:35:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




За примерчик с промежуточной переменной - спасибо. Здесь:
Цитата:
а примерчик можно?

я имел ввиду примерчик без использования промежуточной переменной, хотя в моем случае нужна именно переменная, потому как еще несколько запросов с ней выполнить нужно.
Далее, как теперь заюзать эту функцию? Предпочтительней в Kohana ORM, но можно и в обыйчном PHP. Как запрос собственно строить? Как вообще вызвать пользовательскую функцию в mysql? Что-то про команду call() ищу не могу найти.

(Отредактировано автором: 29 Июля, 2013 - 19:38:21)

 
 Top
EuGen Администратор
Отправлено: 29 Июля, 2013 - 19:50:27
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




nkl пишет:
без использования промежуточной переменной

Так, очевидно:
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO table2 (column1, column2) VALUES(LAST_INSERT_ID(), Param2);

Касаемо вызова: http://stackoverflow[dot]com/questio[dot][dot][dot]tored-procedures , http://stackoverflow[dot]com/questio[dot][dot][dot]re-in-kohana-3-1 и т.п.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
nkl
Отправлено: 29 Июля, 2013 - 20:10:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Кажется нашел что мне надо в официальном API browser. По моему вот то, что мне нужно:
Цитата:
$query = DB::select(array(DB::expr('degrees(acos(sin(radians('.$lat.')) * sin(radians(`latitude`)) + cos(radians('.$lat.')) * cos(radians(`latitude`)) * cos(radians(abs('.$lng.' - `longitude`))))) * 69.172'), 'distance'))->from('locations');

Но теперь мне интересно, как мне вызвать эту функцию в mysql из консоли? Просто для отладки.
(Добавление)
Спасибо, разобрался

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT insertMegaRow(1, 2)

Все работает, у меня в функцию ошибочка кралась, ага.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB