2
如何選擇3個問題ID並將它們用作單個插入語句的列數據,僅使用MySQL。使用子查詢行作爲列的MySQL單一插入
我目前使用下面的語句通過選擇問題表中的單個隨機進入插入新行進入遊戲表:
當前表:
-------------------------------
| game | user_id | question_id |
-------------------------------
| 1 | 1 | 10 |
當前語句:
INSERT INTO game (user_id, question_id)
SELECT u.id as user_id, q.id as question_id
FROM user u, question q
WHERE u.id =:uid
AND q.category = :category
ORDER BY RAND()
LIMIT 1
邯Ë表: 我已經添加了列opt_1-3允許多選
-------------------------------------------------------
| game | user_id | question_id | opt_1 | opt_2 | opt_3 |
-------------------------------------------------------
| 1 | 1 | 10 | 5 | 12 | 80 |
^ ^ ^
alternative wrong answers
我可以用PHP實現這一目標,遍歷結果並使用兩個查詢。
SELECT id FROM question
WHERE category = :category
ORDER BY RAND()
LIMIT 3
$opts = array();
foreach($result as $r){
$opts[] = $r->id;
}
INSERT INTO game (user_id, question_id)
SELECT u.id as user_id, q.id as question_id,
// add the following line to the query posted previously
$opt[0] AS opt_1, $opt[1] AS opt_2, $opt[2] AS opt_3
...
我想知道,如果它能夠實現純粹使用MySQL相同的結果。
工作!我一直在試着用這樣的表述整天,但是我不能完全理解它,並且不會像預期的那樣工作。 (甚至開始看樞軸!:/)我已經讀了一些關於RAND()緩慢以及如何優化的內容,但在構建和測試時,它現在就足夠了。謝謝:) – TerryProbert 2013-02-18 16:33:32
很高興幫助。像這樣的事情讓我覺得有點。 – Kickstart 2013-02-18 16:34:45