我有两个表产品,库存我想从表产品中选择未插入库存的所有行,我有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
答案 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);