Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (4) [1] 2 3 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Триггер
Zzepish  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5583
Пользователь №: 32538
На форуме: 5 лет, 29 дней
Карма: 56




DELIMITER //
CREATE TRIGGER `add_ten_percent` AFTER UPDATE ON `users`
FOR EACH ROW BEGIN
UPDATE
`users`
SET
`money` = (`money`+`money`/10)
WHERE
`id` = NEW.`referer`;
END

Пишу тайкой триггер. Суть в чем: чтоб при добавлении юзером денег, у его реферера сумма увеличивалась на 10 процентов от внесенных средств.
Но у меня так не работат.
Фишка в том, что `money` = (`money`+`money`/10) сюда подставляеться значение из именяемой строки (т.е. не реферера, а текущего юзера), как и сюда `id` = NEW.`referer`; . Что я делаю не так?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2789
Пользователь №: 24406
На форуме: 6 лет, 8 месяцев, 9 дней
Карма: 180




Как минимум с логикой проблемы.
Даже то, что пытаешься начислить (неважно кому) 10% от уже имеющейся у него суммы (а не от внесенной пользователем):

`money` = (`money`+`money`/10)


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Zzepish  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5583
Пользователь №: 32538
На форуме: 5 лет, 29 дней
Карма: 56




T1grOK
Согласен. Под конец дня уже замахался и туплю.
Так как решить проблему?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1941
Пользователь №: 38654
На форуме: 3 года, 5 месяцев, 22 дня
Карма: 46




Настоятельно рекомендую не использовать триггеры и прочую функциональность которая позволяет в СУБД реализовывать логику приложения. Уже была тема, там была речь о датах и таймзонах, тут теже самые принципы. Инструмент есть, но его лучше не использовать.


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15383
Пользователь №: 4190
На форуме: 9 лет, 4 месяца, 20 дней
Карма: 470




chee, триггеры можно и нужно использовать, ибо они для того и сделаны, чтобы работать.

Цитата (Zzepish @ 5.01.2017 - 19:08)
Что я делаю не так?

Во-первых, ты вызываешь UPDATE таблицы из триггера AFTER UPDATE этой же таблицы. Это же и во-вторых, и в-третьих smile.gif
В Мускуле нельзя апдейтить таблицу в такой ситуации. Погугли по словам "mysql trigger update same table".


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
waldicom  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6268
Пользователь №: 5552
На форуме: 8 лет, 11 месяцев, 19 дней
Карма: 164




Цитата (chee @ 5.01.2017 - 19:13)
Настоятельно рекомендую не использовать триггеры

Цитата (sergeiss @ 5.01.2017 - 19:56)
триггеры можно и нужно использовать

Вот вам третье мнение: триггеры можно использовать в "своем" (локальном) продукте, когда только вы им пользуетесь. И нельзя(=не надо) в широко используемых продуктах (cms, ecommerce, etc)


--------------------
Свои мозги еще никто не отменял.
Телепатов нету.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата (sergeiss @ 5.01.2017 - 22:56)
chee, триггеры можно и нужно использовать, ибо они для того и сделаны, чтобы работать.

Во многих продуктах много чего сделано, но это не означает, что все из этого нужно использовать. Цель разработчиков - срубить максимум хайпа. Они готовы зарелизить любой фичареквест на который спрос чуть более чем у полторы калеки. Их не интересует, правильно ли это с точки зрения архитектуры или нет. Их интересует количество пользователей и денег вокруг их продукта.

Если ты используешь то, что тебе предлагают, только потому что оно есть, тогда ты просто жертва маркетинга. Нужно сначала взвесить плюсы и минусы и только потом принимать решение. У триггеров действительно серьезный минус в размывании логики приложения, при том, что всё что они предлагают можно реализовать на уровне приложения. Этого уже достаточно, чтобы их не использовать.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1941
Пользователь №: 38654
На форуме: 3 года, 5 месяцев, 22 дня
Карма: 46




Цитата (Guest @ 5.01.2017 - 23:14)

Если ты используешь то, что тебе предлагают, только потому что оно есть, тогда ты просто жертва маркетинга. Нужно сначала взвесить плюсы и минусы и только потом принимать решение. У триггеров действительно серьезный минус в размывании логики приложения, при том, что всё что они предлагают можно реализовать на уровне приложения. Этого уже достаточно, чтобы их не использовать.

примерно это я и имел ввиду


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1941
Пользователь №: 38654
На форуме: 3 года, 5 месяцев, 22 дня
Карма: 46




Цитата (sergeiss @ 5.01.2017 - 22:56)
chee, триггеры можно и нужно использовать, ибо они для того и сделаны, чтобы работать.

Я не отрицаю, что они работают.

На основе СУБД(типа mysql и других) можно выстроить примитивные приложения с пользователями, правами, отчетами, планировщиком и логикой, вот для этого все эти инструменты там и нужны (тригеры, планировщик, работа с временными зонами).

Но мы то делаем апликухи (на всём что угодно кроме СУБД) и используем эту СУБД как хранилище, так зачем туда нести логику, которая должна быть в апликухе. Логика в СУБД была резонна только тогда когда мы бы делали апликуху на самой СУБД.


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15383
Пользователь №: 4190
На форуме: 9 лет, 4 месяца, 20 дней
Карма: 470




Guest, chee - естественно, что триггеры надо использовать не потому, что они есть, а там, где они нужны.
Но у меня с вами, похоже, очень сильно отличается восприятие того, где они нужны smile.gif Потому что я уверен, что в БД можно и нужно передавать часть логики приложения, которая хорошо и удобно реализуется в БД. Кроме всего прочего, это быстрее получается. Также можно быть уверенным, что всё будет сделано правильно - особенно в случае, когда над проектом работают много разработчиков. И кто-то где-то может забыть (или не знать), что после таких-то действий надо еще сделать то-то и то-то. А если это реализовано в БД, то им об этом и знать не надо. А уж если разные приложения "вдруг" обращаются к одной и той же БД, то тут уж без обработки данных в БД вообще никак не обойдешься.

В идеале, в БД надо просто передавать данные для записи, а она сама должна делать всю необходимую доработку. И БД должна отдавать запрошенные данные в том виде, чтобы их сразу можно было использовать без дополнительной обработки в приложении.

PS. Видел тут одну вакансию... Предлагали делать веб-страницу + приложение для мобилы, с использованием Постгре, с реализацией всей логики приложения на стороне БД. За очень хорошие бабки предлагали работать smile.gif Я им отправил резюме. Не ответили. На странице компании нашел имена и фото людей, нашел их ВКонтакте. Пообщались. Я так и не понял, чем я им не подошел. И не знаю, нашли ли они кого-нибудь другого.

Это сообщение отредактировал sergeiss - 5.01.2017 - 23:33


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1941
Пользователь №: 38654
На форуме: 3 года, 5 месяцев, 22 дня
Карма: 46




sergeiss, я тебя понимаю, но ты втираешь какую-то дичь. Я понимаю "что ты увидел, что шалаши из говна и палок строятся довольно быстро, но это не означает, что такие калаши это кашерные здания и в них возможно удобно жить".


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kaww  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1787
Пользователь №: 20757
На форуме: 7 лет, 4 месяца, 23 дня
Карма: 187




Цитата (chee @ 5.01.2017 - 23:26)
используем эту СУБД как хранилище, так зачем туда нести логику, которая должна быть в апликухе.

Так давайте и auto increment не будем использовать никогда тоже. Тригеры, хранимые процедуры - мощный и удобный инструмент, так зачем от него отказываться. В системах, когда одну БД используют несколько независимых компонентов, реализация логики хранилища именно в хранилище (внезапно) выглядит более чем логично, как уже заметил sergeiss - это и id, и например, счетчики товаров в каталоге, и прочее.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8948
Пользователь №: 26630
На форуме: 6 лет, 3 месяца, 24 дня
Карма: 606




Цитата (chee @ 5.01.2017 - 22:13)
Уже была тема, там была речь о датах и таймзонах, тут теже самые принципы. Инструмент есть, но его лучше не использовать.

точно, а я то думаю, где то забыл ответить smile.gif

Цитата (kaww @ 5.01.2017 - 23:41)
Так давайте и auto increment не будем использовать никогда тоже.

+1 это же нарушает пассивность хранилища laugh.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15383
Пользователь №: 4190
На форуме: 9 лет, 4 месяца, 20 дней
Карма: 470




Цитата (chee @ 5.01.2017 - 23:37)
но ты втираешь какую-то дичь

В чем именно заключается "дичь"? smile.gif

Вот я пример чуть выше пример. Требования в вакансии: БД, веб-сервер с клиентом и мобильное приложение. ГДЕ реализовывать бизнес-логику? Одновременно на сервере и в мобильном приложении? И разрабатывать, и потом модифицировать? А надо реально одновременно менять, иначе будут нестыковки в данных. Нафиг-нафиг, такой подход с вероятностью 100% приведет к ошибкам. Вся обработка должна делаться в одном месте. И таким местом является как раз БД.

Про шалаши не понял. Я наоборот предлагаю строить не "шалаши из говна и палок", а нормальные здания из современных материалов - если уж проводить строительную аналогию.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата (kaww @ 5.01.2017 - 23:41)
Так давайте и auto increment не будем использовать никогда тоже.

Никогда не нужно, а вот иногда имеет смысл. Если будем шардить таблицы по серверам ohmy.gif
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (4) [1] 2 3 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса