1

1 つのクエリの結果が 2 番目のクエリに通知されるように、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 構文にエラーがあります。near 'while @countofpost > 0 DO を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

どんな考えでも大歓迎です。

4

1 に答える 1

0

2つのこと:

  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 に答える