我有一个在phpMyAdmin中运行良好的SQL查询,但是我无法通过Joomla API使其工作。这是我的Joomla代码:
$myid = 17;
$query->select($db->qn('MESSAGE.ID','MESSAGE.ID'));
$query->select($db->qn('MESSAGE.INQUIRY_ID','MESSAGE.INQUIRY_ID'));
$query->select($db->qn('INQUIRY.ID','INQUIRY.ID'));
$query->from($db->qn('MESSAGE'));
$query->innerJoin($db->qn('INQUIRY'));
$query->on($db->qn('MESSAGE.INQUIRY_ID') . ' = ' . $db->qn('INQUIRY.ID'));
$query->where($db->qn('MESSAGE.ID') . ' = ' . $db->quote($myid));
$db->setQuery($query);
$msg = $db->loadObjectList();
var_dump($msg);exit();
这就是我从垃圾场得到的东西:
array(4) { [0]=> object(stdClass)#787 (3) { ["MESSAGE.ID"]=> string(2) "17"
**["MESSAGE.INQUIRY_ID"]=> string(1) "5" ["INQUIRY.ID"]=> string(1) "2"** }
[1]=> object(stdClass)#788 (3) { ["MESSAGE.ID"]=> string(2) "17"
["MESSAGE.INQUIRY_ID"]=> string(1) "5" ["INQUIRY.ID"]=> string(1) "3" }
[2]=> object(stdClass)#789 (3) { ["MESSAGE.ID"]=> string(2) "17"
["MESSAGE.INQUIRY_ID"]=> string(1) "5" ["INQUIRY.ID"]=> string(1) "4" }
[3]=> object(stdClass)#790 (3) { ["MESSAGE.ID"]=> string(2) "17"
["MESSAGE.INQUIRY_ID"]=> string(1) "5" ["INQUIRY.ID"]=> string(1) "5" } }
我对"内部联接"的理解是只有那些记录应该加入MESSAGE.INQUIRY_ID和INQUIRY.ID字段相同的地方。转储中似乎不是这种情况(参见粗体)。
我做错了什么?
非常感谢, W.
答案 0 :(得分:0)
如果您使用的是查询构建器,则可以使用echo $query->dump();
方法检查最终查询并将其与工作查询进行比较。
正如您所说,在您的情况下,问题出在on
方法,该方法不存在且您的查询不符合您的预期。