2017-10-17 65 views
0

我有以下查询在table_question选择的问题ID:如何根据给定的百分比选择MySQL数据?

$sql = "SELECT s.question_id 
     FROM table_question s 
     WHERE s.chapter_id = $chapter_id 
     AND s.publish_status = ".PUBLISHED_ACTIVE." AND (
     s.format_type_id = ".QST_TYPE_OBJECTIVE." OR (s.format_type_id = ".QST_TYPE_SHORT_ANSWER." AND s.question_id < 200000 AND s.publish_status = ".PUBLISHED_ACTIVE.")) 
     ORDER BY RAND() LIMIT 5"; 

$obj_question_ids = DB::connection('mysql_question')->select(DB::raw($sql)); 

在我的数据库,我得到了客观题和15031主观题133010。现在,我如何确保我的问题选择的比例是

70%目标问题和30%的问题将是结构问题?

+2

你如何获得70%,满分5返回的行? –

+0

每个章节的限制只有5个问题 – Nere

+0

As @GordonLinoff说:5答案中的70%是3.5,这是不可能的。在最好的情况下,您可以在5个答案中获得60% - 40%。这就是解决方案,随机3个客观问题和2个主观问题。 –

回答

2

威力工作

让我们用括号尝试

usage of union

(SELECT s.question_id 
      FROM table_question s 
      WHERE s.chapter_id = $chapter_id 
      AND s.publish_status = ".PUBLISHED_ACTIVE." AND (
      s.format_type_id = ".QST_TYPE_OBJECTIVE." OR (s.format_type_id = ".QST_TYPE_SHORT_ANSWER." AND s.question_id < 200000 AND s.publish_status = ".PUBLISHED_ACTIVE.")) 
      ORDER BY RAND() LIMIT 3) 
    UNION 
    (SELECT s.question_id 
      FROM table_question s 
      WHERE s.chapter_id = $chapter_id 
      AND s.publish_status = ".PUBLISHED_ACTIVE." AND (
      s.format_type_id = ".QST_TYPE_SUBJECTIVE." OR (s.format_type_id = ".QST_TYPE_SHORT_ANSWER." AND s.question_id < 200000 AND s.publish_status = ".PUBLISHED_ACTIVE.")) 
      ORDER BY RAND() LIMIT 2) 
+0

不正确的使用UNION和ORDER BY – Nere

+0

然后好的......谢谢! – Nere