まず最初はこんな感じのテーブルにしていました。
mysql> desc mail_send_targets; +-------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+------------+------+-----+---------+-------+ | user_id | bigint(20) | NO | MUL | NULL | | | item_id | bigint(20) | NO | MUL | NULL | | | expire_date | datetime | NO | | NULL | | +-------------+------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
このテーブルに対して、こういうコードを書いたところ、実行したらエラーがでました。
targets = MailSendTarget.where(item_id: item_id) targets.find_each(batch_size: 2000) do |target| #処理 end ERROR -- : Mysql2::Error: Unknown column 'mail_send_targets.' in 'order clause': SELECT `mail_send_targets`.* FROM `mail_send_targets` WHERE `mail_send_targets`.`item_id` = 96 ORDER BY `tmp_mail_send_targets`.`` ASC LIMIT 2000 (ActiveRecord::StatementInvalid)
エラーの内容を見ていくと、ORDER BYのカラムが指定されていなくて、
どうやらprimary keyをorder byに指定するようなので、
テーブルにprimary keyを設定する必要がありそうです。
mysql> desc mail_send_targets; +-------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+------------+------+-----+---------+-------+ | id | bigint(20) | NO | PRI | 0 | | | user_id | bigint(20) | NO | MUL | NULL | | | item_id | bigint(20) | NO | MUL | NULL | | | expire_date | datetime | NO | | NULL | | +-------------+------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)
プライマリーキーを設定したところ、エラーが起こらずに処理が流れるようになりました。
このコメントは投稿者によって削除されました。
返信削除このコメントは投稿者によって削除されました。
返信削除