SQL从两个单独的表中选择行,其中一个是随机选择的

时间:2014-05-26 17:36:29

标签: mysql sql

我目前正在开发一个由后端数据库驱动的多项选择足球测验。对于我的数据库,我创建了2个表。

第一个表称为问题,包含以下数据

Id,Team1,Team2,Score1,Score2,Year和Round作为属性

我的第二张表是答案,包含以下数据

Id和团队

样本数据如下所示

问题:

1,西班牙,荷兰,0,0,2010,最终 2,英格兰,德国,1,4,2010,过去16

答案

1,英国 1,法国 1,德国 1,巴西 1,西班牙 1,荷兰

我将所有团队的ID保持为1,这样他们在调用时都可以处于相同的答案集中

我的申请的目的是使用如下所示的模板向用户提问:

$thisQuestion = 'Which team defeated '. $team1.' '.$score1.' - '.$score2.' in the '. $round .' of the '.$year.' world cup';

在问题的下方,我希望有4个团队向用户显示可能的答案,其中3个是从答案表中随机抽取的,第4个是正确的答案。

到目前为止,我只能使用以下代码从答案表中调用3个随机小组

$sql2 = mysql_query("SELECT * FROM answers2 WHERE id=1 ORDER BY RAND() LIMIT 3");

任何帮助将不胜感激

页面的完整示例代码如下所示

    <?php 

session_start();
require_once("scripts/connect_db.php");
$countArray = "";
if(isset($_GET['question'])){
    $question = preg_replace('/[^0-9]/', "", $_GET['question']);
    $outputText = "";
    $answerText = "";
    $r = "";
    $sql = mysql_query("SELECT id FROM questions");
    $numberOfQuestions = mysql_num_rows($sql);
    if(!isset($_SESSION['a_array']) || $_SESSION['a_array'] < 1){
        $currQuestion = "1";
    }else{
        $countArray = count($_SESSION['a_array']);
    }
    if($countArray > $numberOfQuestions){
        unset($_SESSION['a_array']);
        header("location: menu.php");
        exit();
    }
    if($countArray >= $numberOfQuestions){
        echo '<p>There are no more questions. Please enter your name and click next to find out your score</p>
                <form action="userResults.php" method="post">
                <input type="hidden" name="complete" value="true">
                <input type="text" name="username">
                <input type="submit" value="Finish">
                </form>';
            $outputText = ''.$r.','.$answerText.', ';
            echo $outputText;

        exit();
    }

    $singleSQL = mysql_query("SELECT * FROM questions WHERE id='$question' LIMIT 1");
        while($row = mysql_fetch_array($singleSQL)){
            $id = $row['ID'];
            $team1 = $row['Team1'];
            $team2 = $row['Team2'];
            $score1 = $row['Score1'];
            $score2 = $row['Score2'];
            $round = $row['Round'];
            $year= $row['Year'];
            $thisQuestion = 'Which team defeated '. $team1.' '.$score1.' - '.$score2.' in the '. $round .' of the '.$year.' world cup';

            $question_id = $row['ID'];
            $r = '<h2>'.$thisQuestion.'</h2>';
            $sql2 = mysql_query("SELECT * FROM answers2 WHERE id=1 ORDER BY RAND() LIMIT 3");
            while($row2 = mysql_fetch_array($sql2)){
                $answer = $row2['team'];
                $correctAnswer = $team2;
                $answerText .= '<label style="cursor:pointer;"><input type="radio" name="rads" value="'.$correctAnswer.'">'.$answer.'</label> 
                <input type="hidden" id="qid" value="'.$id.'" name="qid"><br /><br />
                ';

            }
            $outputText = ''.$r.','.$answerText.',<span id="btnSpan"><button onclick="post_answer()">Submit</button></span><br />';
            echo $outputText;
           }
        }


?>

1 个答案:

答案 0 :(得分:0)

这不是一个完整的答案,但我认为您可以轻松扩展它以做您想要的。主要问题(据我所知)是这样的:你需要一个随机选择的四个团队名称的列表,除了它必须包含一个特定的团队名称和所有4个随机排列。

事实证明在MySQL中相当简单。这是一个简单的表格,仅包含用于说明的团队名称。

CREATE TABLE Teams (
  Team VARCHAR( 20 )
);

insert into Teams( Team )
  SELECT 'Spain' UNION ALL
  SELECT 'Holland' UNION ALL
  SELECT 'England' UNION ALL
  SELECT 'Germany' UNION ALL
  SELECT 'Brazil' UNION ALL
  SELECT 'Mexico' UNION ALL
  SELECT 'Uraguay' UNION ALL
  SELECT 'Sweden' UNION ALL
  SELECT 'France';

然后从您的问题中获取Team1。在这里,我只是将其设置为一个值。

set @Team1 := 'Germany';

select Team
from(
  SELECT Team
  FROM Teams
  WHERE  Team <> @Team1
  ORDER BY Rand()
  limit 3
) T
union all
SELECT @Team1
order by Rand();

每次执行时都会生成四个不同的名称,但列表将始终包含德语。您可以考虑将最后一行更改为order by Team,因为如果按字母顺序排列,随机名称列表仍然是随机的。