2
データスキームにそれらをトランスポーズ:セッションの私は(lvlid1、lvlid2、lvlid3、lvlid4)にレベルテーブルから4つのランダムに異なるIDを選択するにはどうすればよいMYSQL - 4つのランダムな行を選択し、INSERT文の列
create table level (
id int auto_increment primary key,
# ... other data which is not relevant
);
create table session (
id int auto_increment primary key,
lvlid1 int not null,
lvlid2 int not null,
lvlid3 int not null,
lvlid4 int not null,
ts timestamp not null default current_timestamp,
foreign key(lvlid1) references level(id),
foreign key(lvlid2) references level(id),
foreign key(lvlid3) references level(id),
foreign key(lvlid4) references level(id)
);
表? は、具体的には、私はそれが可能このような何かをするかどうかを知りたい:
insert into session (lvlid1, lvlid2, lvlid3, lvlid4)
values(TRANSPOSE(select id from level order by rand() limit 4))
ありがとうございます!私はその考えを得た。しかし、最も内側の選択肢を2つに分割して機能させる必要があります。これは、row_numberを最初に割り当て、4つのrandomに1,2,3,4が含まれないようになりました。しかし、私はそれを動作させることができました。例えば、 – rotanov
。このようにhttps://gist.github.com/rotanov/c6b53600daca159be3c2694c61774b69 – rotanov
私はそれ以上の考えを与えて、今私はあなたが 't2.rn limit 4'をすべて省略するか、単に 'limit 4 「最奥の選択に戻る。私はどちらがパフォーマンス的に優れているか分かりません。 – rotanov