这是我在phpmyadmin中完成的一个较大查询的子集,但我对在Joomla中构建的组件中使用它的语法有点迷失和困惑。
phpmyadmin:中的代码
drop table if exists tests_mod_ques;
create table tests_mod_ques as
select p.student_userid, q.question_mod, q.question_id, p.student_passedchk
from `tests_students` p
inner join `tests_questions` q on p.question_id = q.question_id
group by p.student_userid, q.question_mod, q.question_id, p.student_passedchk
;
引发1064语法错误的代码:
$query = parent::getListQuery();
$query->dropTable('#__tests_mod_ques', 'true');
$query->createTable('#__tests_mod_ques AS
select (p.student_userid
, q.question_mod
, q.question_id
, p.student_passedchk)
');
$query->from('#__tests_students AS p');
$query->join('#__tests_questions AS q ON p.question_id = q.question_id');
$query->group('p.student_userid
, q.question_mod
, q.question_id
, p.student_passedchk
');
....
$db = $this->getDbo();
return $query;
我只测试了dropTable语句,即使它没有抛出错误,它也没有删除表,也没有显示在调试器中,所以我可能没有正确使用它:http://api.joomla.org/Joomla-Platform/Database/JDatabase.html#dropTable
除了以下内容之外,似乎找不到任何要创建的引用:http://api.joomla.org/Joomla-Platform/Database/JDatabase.html#getTableCreate
此外,我还有一个INSERT…ON DUPLICATE KEY UPDATE
查询,我也不确定如何处理。
谢谢!
编辑
我尝试过删除行作为一种变通方法,但也没有注册。再次检查调试器,删除查询没有显示。
$query->delete('#__tests_mod_ques');
这应该根据http://api.joomla.org/Joomla-Platform/Database/JDatabaseQuery.html#$delete
和http://docs.joomla.org/JDatabaseQuery::delete/1.6
工作
令人沮丧!有人知道吗?
谢谢!
您可以尝试以下操作-
$query->createTable('#__tests_mod_ques AS
select (p.student_userid
, q.question_mod
, q.question_id
, p.student_passedchk)
from #__tests_students AS p
inner join #__tests_questions AS q ON p.question_id = q.question_id
group by p.student_userid
, q.question_mod
, q.question_id
, p.student_passedchk');
问题应该是$query属于JDatabaseQuery类,因为您是如何初始化它的,所以它只有下面列出的方法:http://docs.joomla.org/JDatabaseQuery/1.6
您试图调用的方法实际上是JDatabase的方法,您在最后创建了它的实例。因此,您应该能够执行$db->createTable(…等操作,它将实际运行。