2013-07-14 155 views
0

是否可以從一個表中選擇x個隨機行,其中一個行必須是一個查詢中的特殊行(從而具有特殊字段值)?MySQL在一個查詢中選擇具有一個唯一行的隨機行

基本上我正在創建的是一個猜測遊戲,其中有x個問題的數量,x個可能的數量(複選框可選)答案!

這是我選擇的答案目前...隨着2查詢的

$answers = 4; // This is the max amount of answers 

//只是用於測試的question_id手動設置

$query = "SELECT * FROM `answers` WHERE `question_id` = 0 AND `correct` != 1 ORDER BY RAND() LIMIT " . ($answers - 1) . ""; 
$query = "SELECT * FROM `answers` WHERE `question_id` = 0 AND `correct` = 1 LIMIT 1"; 

的「question_id」講述這問題,我們正確的「只是告訴該字段是否正確答案

所以有可能從表中選擇x個隨機行,其中一行有在一個查詢中是「正確的」?

+0

你嘗試使用UNION子句? – Sparky

回答

1

可能會使用UNION

$answers = 4; 

$query = "SELECT * FROM `answers` WHERE `question_id` = 0 AND `correct` != 1 ORDER BY RAND() LIMIT " . ($answers - 1) . ""; 

$query .= " UNION "; 

$query .= "SELECT * FROM `answers` WHERE `question_id` = 0 AND `correct` = 1 LIMIT 1"; 

用一個單一的查詢,你將能夠得到期望的結果

http://dev.mysql.com/doc/refman/5.0/en/union.html

+0

該死的,這給了我這個錯誤...不正確的使用UNION和ORDER BY – Vallentin

+1

哦,它需要圍繞每個「查詢」 – Vallentin

0
$query = "SELECT * FROM answers WHERE ... whatever ... AND `question_id` IN (5, 9, 12, 16, 2) 

所以,你先找到的行數,然後把正確答案的ID到WHERE IN聲明。因爲你知道你想要的那個,所以你可以用表中的隨機ID包圍它,然後以隨機的方式渲染它們。

+0

不,我不知道答案的ID,我唯一知道的是question_id和行數(回答)我想要的回報 – Vallentin

+0

然後在存在的行數裏面生成隨機數 – David

+0

所以你要我做另一個查詢,檢查有多少行存在,然後......那麼這不會使它成爲只有一個查詢? – Vallentin

相關問題