为了提高效率,我正在尝试将以下查询合并为一个(如果可能)。
这个表单实际上是测验的问题表单,它有一个 $quiz_id 和一个 $user_id。这个问题附加了一个外键,即clue_id。
- 在第一个查询中,我选择该特定测验的线索 ID。
- 然后在第二个查询中,我询问有多少测验共享相同的线索_id?将其返回为 $count_quiizes_with_this_clue。
- 在最后一个中,我计算了已回答并存储在单独的多对多关系表 (fab_ans_quest) 中的测验数量。该表只有 user_id 和已正确回答的 quiz_id。
因此,我想比较点 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();
最佳答案
如果您不打算在不久的将来使用不同的 RDBMS,则根本不需要使用 $query 对象。
你可以拥有:
$db =& JFactory::getDbo();
$sql = "SELECT ... FROM ... WHERE ...";
$db->setQuery($sql);
$arr = $db->loadAssocList();
关于php - Joomla 中的 Mysql : Efficient multiple selects in one query and possible evaluation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20548031/