小编Ale*_*rut的帖子

如果那么Mysql触发器那么

我的存储是INNODB,我试图在IF语句中创建一个带有2个查询的触发器.向下你可以看到给我错误的触发器

delimiter |
CREATE TRIGGER count_delete_videos BEFORE DELETE ON videos
  FOR EACH ROW BEGIN
    UPDATE counts SET count = count - 1 WHERE name = 'all';

    IF OLD.published = 1 THEN
        DELETE FROM videos_categories WHERE id_video = OLD.id;
        DELETE FROM videos_tags WHERE id_video = OLD.id;
    END IF;
  END;
|
delimiter ;

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 '= OLD.id;
    END IF; …
Run Code Online (Sandbox Code Playgroud)

mysql triggers innodb if-statement

12
推荐指数
1
解决办法
6万
查看次数

SQL ORDER BY性能

我有一张超过100万条记录的表格.问题是查询需要花费太多时间,比如5分钟."ORDER BY"是我的问题,但我需要查询顺序中的表达式才能获得最受欢迎的视频.而且由于表达式我无法在其上创建索引.

我该如何解决这个问题?
谢谢.

SELECT DISTINCT 
`v`.`id`,`v`.`url`, `v`.`title`, `v`.`hits`, `v`.`created`, ROUND((r.likes*100)/(r.likes+r.dislikes),0) AS `vote` 
FROM 
`videos` AS `v` 
INNER JOIN 
`votes` AS `r` ON v.id = r.id_video 
ORDER BY 
(v.hits+((r.likes-r.dislikes)*(r.likes-r.dislikes))/2*v.hits)/DATEDIFF(NOW(),v.created) DESC
Run Code Online (Sandbox Code Playgroud)

mysql sql sql-order-by

4
推荐指数
1
解决办法
689
查看次数

在handle_call/3行为(gen_server),Erlang/OTP的递归调用中出现超时错误

我正在尝试在回复之前对handle_call/3进行递归调用.但似乎不可能,因为timeout抛出了退出异常.您可以在下面看到代码和错误.

代码:

-module(test).
-behavior(gen_server).

%% API
-export([start_link/0,init/1,handle_info/2,first_call/1,second_call/1, handle_call/3, terminate/2]).

-record(state, {whatever}).

start_link() ->
  gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).

init(_Args) ->
  {ok, #state{}}.

handle_info(Data, State) ->
  {noreply, State}.

% synchronous messages
handle_call(_Request, _From, State) ->
  case _Request of
    first_call ->
      {reply, data1, State};
    second_call ->
      {reply, {data2, first_call(self())}, State}
  end.

first_call(Pid) ->
  gen_server:call(Pid, first_call).

second_call(Pid) ->
  gen_server:call(Pid, second_call).

terminate(_Reason, _State) ->
  ok.
Run Code Online (Sandbox Code Playgroud)

错误:

2> {_, PID} = test:start_link().
{ok,<0.64.0>}
3> test:second_call(PID).
** exception exit: {timeout,{gen_server,call,[<0.64.0>,second_call]}}
     in function  gen_server:call/2 (gen_server.erl, …
Run Code Online (Sandbox Code Playgroud)

erlang recursion erlang-otp gen-server

1
推荐指数
1
解决办法
298
查看次数