1

我正在尝试在 mysql 中编写一个循环,以便一个查询的结果通知第二个。这是我当前的查询集:

 select @post_date := from_unixtime(post_date)
 from posts
 where post_date > unix_timestamp('2012-10-20') and nsfw=1;

 select @countofpost := count(@post_date);

 while @countofpost > 0 DO

  select count(*)
  from live_sharedata.users
  where joined between @post_date and (@post_date + 21600) and joined_site_id="RS";

  set @countofpost = @countofpost -1;

 end while;

我收到的错误是 [Err] 1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 'while @countofpost > 0 DO 附近使用的正确语法。

任何想法将不胜感激。

4

1 回答 1

0

两件事情:

  1. 运行SELECT @post_date;- 它是否向您显示正确的信息?MySQL 中的变量不能包含数组或多个项目。如果您需要变量来保存多个对象,则需要使用CURSOR.
  2. 对于您的select @countofpost := count(@post_date);查询,您也可以将其重写为SET @countofpost = FOUND_ROWS();. FOUND_ROWS()返回如果没有 LIMIT 子句将返回的行数,因此无需COUNT()在行集中运行该命令。

我相信,您需要使用游标重新编写查询,因为(我认为)您希望第一个SELECT @post_date := from_unixtime(post_date) ...查询返回多个对象。请查看参考手册的光标部分以获取更多信息。

于 2012-11-08T01:08:13.473 回答