zend db选择加入帮助

时间:2011-05-31 09:33:42

标签: php mysql zend-framework select join

所以我有这段代码:

$sql = new Zend_Db_Select($db);
$sql->from("j");
$sql->join("k","k.id = j.id",array());
echo $sql;

导致查询:

SELECT `j`.* FROM `j` INNER JOIN `k` ON k.id = j.id

但我不只是想要j。*

我也想要k。*

如何为此指定zend_db_select?

5 个答案:

答案 0 :(得分:2)

join()的第三个参数是select columns。你已经传了一个空数组。

$sql = new Zend_Db_Select($db);
$sql->from('j');
$sql->join('k','k.id = j.id',array());
echo $sql;

注意:对于此条件k.id = j.id,您应该使用LEFT JOIN( - > joinLeft(...))

答案 1 :(得分:1)

您可以在from方法中指定列。

$sql->from(array("j" => "j", array("j.*" , "k.*");

老实说,我并不完全确定,但Zend文档是这样说的:)

答案 2 :(得分:0)

如果你还想k.*,我想你应该有 $sql->join("k","k.id = j.id");array()作为第三个参数 据我所知,第三个参数指定了从k中选择的列,因为你传递了一个空数组,我猜你要覆盖那个默认值k.*

答案 3 :(得分:0)

您明确告诉联接,当您向其传递空数组时,不希望为k返回任何列。而是使用:

$sql = new Zend_Db_Select($db);
$sql->from('j');
$sql->joinLeft('k','k.id = j.id');
echo $sql;

这应该产生你想要的东西。

答案 4 :(得分:0)

$sql=new Zend_Db_Select($db);
$sql->from('j',array(
//here fields you want to get from 'j' Ex. 'j.id'
));
$sql->join('k',
// here your condition
'k.id = j.id',
//here the fields you need from 'k'
array(
//now the array is empty!!You need to specify needed fields.
//Or just remove it.Defaults is "k.*"!

));