【问题标题】:sql left join not workingsql左连接不起作用
【发布时间】:2016-02-25 19:59:05
【问题描述】:

我想从表 inv_site_item 中获取总转移项目,其中 'item_id' in inv_sie_item = 'item_code'inv_items 中,我也从包装表中获取包装,这在此查询中工作正常,只有 inv_site_item 出现问题。

错误是:Unknown column 'inv_site_item.site_id' in 'field list'

$where .= " AND inv_items.item_code = $item_code";

$query = "SELECT inv_items.*,packing.name_en `packing_name`,"
    . " COUNT(inv_site_item.site_id) `transfer_out`, COUNT(inv_site_item.location_site_id) `transfer_in`  FROM inv_items"
            . " left join "
            . "inv_packing as packing on packing.id=inv_items.packing"
            . " left join "
            . "inv_site_item as transfer on transfer.item_id=inv_items.item_code"
    . " WHERE item_code !='' " . $where . ""; 

【问题讨论】:

    标签: php mysql left-join


    【解决方案1】:

    你必须使用你的表别名transfer,所以:

    改变

    inv_site_item.site_id
    

    transfer.site_id
    

    还有inv_site_item.location_site_idtransfer.location_site_id

    【讨论】:

    • 我刚刚做了,它在我的查询编辑器中工作,但在我的浏览器中不工作,它给出错误:你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'WHERE item_code !=''' 附近使用正确的语法
    • 你的 $where 等于多少?可以打印查询吗?
    • 是的,我在我的问题中提到,这是从不同的输入中得到不同的东西,例如如果给出 item_code 那么 $where 将是 $where .= " AND inv_items.item_code = $item_code";同样有包装id和成本价
    • if (!empty($item_code)) { $where .= " AND inv_items.item_code = $item_code"; } elseif (!empty($item_name)) { $where .= " AND inv_items.name_en LIKE '$item_name%'"; } elseif (!empty($item_cost)) { $where .= " AND inv_items.current_cost = $item_cost"; } elseif (!empty($item_packing)) { $where .= " AND inv_items.packing = $item_packing"; }
    • @mohsin 轻松打印 $where 并查看输出
    【解决方案2】:

    对于任何与查询相关的错误,如果可能,您应始终检查以打印查询。您的“WHERE”子句未正确填充。

    您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“WHERE item_code !=”附近使用正确的语法

    这意味着您的查询在“WHERE”子句附近出现错误。

    打印您的 $query 变量以查看构建的实际查询,然后您将能够找到错误并修复它。

    <?php echo "<pre>"; print_r($query); echo "</pre>"; ?>
    

    【讨论】:

      【解决方案3】:

      你必须使用你的表别名transfer,所以:

      改变

      inv_site_item.site_id
      

      transfer.site_id
      

      还有inv_site_item.location_site_idtransfer.location_site_id

      并且还将$where .= " AND inv_items.item_code = $item_code";更改为

      $where .= "inv_items.item_code = $item_code";
      

      将查询语句改为

      $query = "SELECT inv_items.*,packing.name_en `packing_name`,"
          . " COUNT(transfer.site_id) `transfer_out`, COUNT(transfer.location_site_id) `transfer_in`  FROM inv_items"
                  . " left join "
                  . "inv_packing as packing on packing.id=inv_items.packing"
                  . " left join "
                  . "inv_site_item as transfer on transfer.item_id=inv_items.item_code"
          . " WHERE " . $where . " AND item_code !=' '"; 
      

      对于 let not empty 子句终于来了...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-02
        • 1970-01-01
        相关资源
        最近更新 更多