Joomla中的Mysql:在一个查询中进行高效的多重选择并进行可能的评估

时间:2013-12-12 15:53:03

标签: php mysql joomla

我试图将以下查询合并为一个,如果可能的话,为了有效性。

表单实际上是测验的问题形式,它有$ quiz_id和$ user_id。这个问题附有一个外键,它是clue_id。

  1. 在第一个查询中,我选择了特定测验的clue_id。
  2. 然后在第二个查询中,我问有多少个测验共享同一个clue_id?返回$ count_quizes_with_this_clue。
  3. 在最后一个中,我正在计算已经回答了多少个测验并存储在一个单独的多对五关系表(fab_ans_quest)中。该表只有user_id和已正确回答的quiz_id。
  4. 因此,我想比较第2点和第3点的数量。如果等于,那么它应该做点什么。

    现在,我试图通过在一个查询中创建上述序列来提高效率。更好的是,如果它甚至可以评估结果,导致真或假会很棒!

    谢谢!

    $db =& JFactory::getDbo();
    $query = $db->getQuery(true);
    $query
        ->select($db->quoteName('clue_id'))
        ->from($db->quoteName('fab_puzzles'))
        ->where($db->quoteName('id') . ' = '. $db->quote($quiz_id));
    $db->setQuery($query);
    $clue_id = $db->loadResult();
    
    $query = $db->getQuery(true);
    $query
        ->select('COUNT(*)')
        ->from($db->quoteName('fab_puzzles'))
        ->where($db->quoteName('clue_id') . ' = '. $db->quote($clue_id));
    $db->setQuery($query);
    $count_quizes_with_this_clue = $db->loadResult();
    
    $query = $db->getQuery(true);
    $query
        ->select('COUNT(*)')
        ->from($db->quoteName('fab_puzzles', 'a'))
        ->join('INNER', $db->quoteName('fab_ans_quest', 'b') . ' ON (' . $db->quoteName('a.id') . ' = ' . $db->quoteName('b.quiz_id') . ')')
        ->where($db->quoteName('a.clue_id') . ' = '. $db->quote($clue_id) . ' AND ' . $db->quoteName('b.user_id') . ' = '. $db->quote($user_id));
    $db->setQuery($query);
    $count_completed_quizes_with_this_clue = $db->loadResult();
    

1 个答案:

答案 0 :(得分:0)

如果您不打算在不久的将来使用其他RDBMS,则根本不需要使用$ query对象。

你可以拥有:

$db =& JFactory::getDbo();
$sql = "SELECT ... FROM ... WHERE ...";
$db->setQuery($sql);
$arr = $db->loadAssocList();