如何从未在codeigniter中的其他表上插入的表中选择数据

时间:2017-09-24 21:46:50

标签: sql codeigniter

我有两个表产品,库存我想从表产品中选择未插入库存的所有行,我有2个条件

1:column products.s_compnay_id = users.u_company_id

2:cloumn stock.s_company_id = users.u_company_id

那是我的模特

<blockquote>interesting quote</blockquote>
<audio src="audio.file" controls></audio>

这是我的控制器

<?php
Class UserProducts_m extends CI_Model{
function index(){
    $session_data = $this->session->userdata('logged_in');
         $name = $session_data['username'];
         $this->db->select('u_company_id');
         $this->db->from('users');
         $this->db->where('u_username', $name);
         $user_data = $query = $this->db->get();
         if ($user_data->num_rows() > 0) {
                foreach ($query->result_array() as $row_userdata) {

                    $usercompanyid[] = $row_userdata;
                }
                $usercompany=$usercompanyid[0]['u_company_id'];
            }
            $query="select products.* from products where !FIND_IN_SET(products.p_id,select stock.s_p_id from stock and stock.s_company_id=$usercompany and p_company_id=$usercompany)";
            $this->db->query($query);
            $result= $this->db->get();
            if ($result->num_rows() > 0) {
                foreach ($result->result_array() as $row_result) {

                    $product_data[] = $row_result;
                }
            }
            //return $result=$query->result();
}

}
?>

这是我的错误

错误号码:1064

您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以便在第1行的“select stock.s_p_id from stock and stock.s_company_id = 1 and p_company_id = 1)”附近使用正确的语法

从产品中选择产品。* FIND_IN_SET(产品.p_id,从库存中选择stock.s_p_id,stock.s_company_id = 1,p_company_id = 1)

文件名:C:/xampp/htdocs/Elvan/system/database/DB_driver.php

行号:691

2 个答案:

答案 0 :(得分:0)

我建议你尝试在查询语句中的vars周围放置花括号。然后它应该正确解析数组值。

$query="select products.* from products where
   !find_in_set(products.p_id,select stock.s_p_id from stock and 
   stock.s_company_id = {$usercompanyid[0]['u_company_id']} and 
   p_company_id = {$usercompanyid[0]['u_company_id']})";

我看到了其他一些问题。

该行

$result= $this->db->get();
不需要

因为$this->db->query($query);已经返回了数据库结果对象。这样做

$result = $this->db->query($query);
if ($result->num_rows() > 0) 
{ ...

然后你有这个无用的代码块(原谅我直言不讳)

foreach ($result->result_array() as $row_result) 
{
    $product_data[] = $row_result;
}

这没用,因为您的代码只是将数组值从一个数组复制到另一个数组。您将使用以下内容保存大量代码执行,这会产生与foreach循环相同的内容。

$product_data = $result->result_array();

result->array()返回一个数组,其中每个项目都是表示表格行的数组。

您之前在$usercompanyid数组中添加项目时做了同样的事情。这样做。

if ($user_data->num_rows() > 0) 
{
    $usercompanyid = $query->result_array();
}

最后一个问题。似乎UserProducts_m::index()没有返回任何内容。

答案 1 :(得分:0)

您可以使用NOT IN sql查询。

SELECT *
FROM products
WHERE product_id NOT IN (select field name form stock where clause);