【问题标题】:Zend DB SELECT with JOIN from databaseZend DB SELECT 与数据库中的 JOIN
【发布时间】:2015-05-09 11:59:29
【问题描述】:

我在 2 小时后一直在尝试解决我的问题,但我仍然没有任何解决方案。也许有人会看到我做错了什么。 我要做的是使用 zend 框架从数据库中选择行。 这是查询我要选择的内容:

SELECT * FROM `products_stock` JOIN `options_stock_values` ON `options_stock_values`.`stock_id` = `products_stock`.`stock_id` WHERE `product_id` = 119

这是一个简单的 JOIN,在 phpmyadmin 中完美运行,但我的 php 代码无法以我想要的方式选择它。

        $select = $this->entity("ProductsStock")->select();
        $select->join('options_stock_values','options_stock_values.stock_id = products_stock.stock_id',array());
        $select->where("product_id = ?", $this->stock->product_id);
        $select->where("extended = ?", 1);
        $rowset = $this->entity("ProductsStock")->fetchAll($select);

        return $rowset;  

这就是我尝试从数据库中选择行的方式。我从可以正常工作的实体中选择 ProductsStock。但是当我在查询中添加 JOIN 函数时,它甚至会忽略 WHERE 语句并给我多行期望一行。

例如 使用没有 JOIN 的 db 查询,我得到两行(我期待它们),但是当我使用 options_stock_values 表添加 JOIN 时,它给了我类似 20 行的东西,没有来自 sencond 表的列。

它只返回第一个表 (ProductsStock) 中的 20 行,而不是 ProductsStock 中的两行与 OptionsStockValues 和第二个表中的列连接。

我认为我的 php 代码看起来不错,但也许我做错了什么?任何人都可以帮助我并给我一些小建议吗?

【问题讨论】:

  • 能否介绍一下zend框架的版本?

标签: php mysql zend-framework


【解决方案1】:

我建议在您的选择对象中包含 FROM 子句:

$select = $this->entity("ProductsStock")->select();
$select->from(array('p'=>'products_stock'),array('*'))
    ->join(array('o'=>'options_stock_values'),'p.stock_id=o.stock_id',array('*'))
    ->where('product_id = ?',119);

没有看到你的表数据,我不知道你是否会得到你正在寻找的结果,但这段代码代表了你在问题顶部提供的 SQL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 2011-04-25
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2017-10-02
    相关资源
    最近更新 更多