Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CodeIgniter子查询存在问题_Codeigniter - Fatal编程技术网

CodeIgniter子查询存在问题

CodeIgniter子查询存在问题,codeigniter,Codeigniter,上面的查询给出了正确的输出 但是,当我使用CI子查询库时: $query=$this->db->query('SELECT g.gallery_id, g.gallery_title, ( SELECT i.gallery_image_path FROM nepal_gallery_image AS i WHERE i.ga

上面的查询给出了正确的输出

但是,当我使用CI子查询库时:

$query=$this->db->query('SELECT g.gallery_id, g.gallery_title, (
                           SELECT i.gallery_image_path
                           FROM nepal_gallery_image AS i
                           WHERE i.gallery_id = g.gallery_id
                           AND i.gallery_image_status =  "Enabled"
                           LIMIT 0 , 1) AS gallery_image_path
                         FROM nepal_gallery AS g
                         WHERE g.gallery_status =  "Enabled"');
结果查询是:

$this->load->library('Subquery');
$this->db->select('g.gallery_id,g.gallery_title');
$sub = $this->subquery->start_subquery('select');
$sub ->select('i.gallery_image_path')
     ->from('nepal_gallery_image AS i')                 
     ->where(array('i.gallery_image_status'=>"Enabled",  
                   'i.gallery_id'=>"g.gallery_id")) 
     ->limit(0,1);
$this->subquery->end_subquery('gallery_image_path'); 
$this->db->from('nepal_gallery AS g');
$this->db->where('g.gallery_stats',"Enabled");
$query=$this->db->get();
而且产出也没有达到预期

第一个查询中的输出是

SELECT `g`.`gallery_id` , `g`.`gallery_title` , (
  SELECT `i`.`gallery_image_path`
  FROM (`nepal_gallery_image` AS i)
  WHERE `i`.`gallery_image_status` = 'Enabled'
  AND `i`.`gallery_id` = 'g.gallery_id'
  LIMIT 0 , 1 ) AS gallery_image_path
FROM (`nepal_gallery` AS g)
WHERE `g`.`gallery_status` = 'Enabled'

美术馆
画廊名称
图库\图像\路径
1.
画廊1
images/image1.jpg
2.
画廊2
images/image2.jpg
但是,在后面的查询中,输出是

    <table>
     <tr>
         <th> gallery_id</th>
         <th> gallery_title</th>
         <th> gallery_image_path </th>
     </tr>
     <tr>
        <td>1</td>
        <td>Gallery 1</td>
        <td>images/image1.jpg</td>
     </tr>
     <tr>
        <td>2</td>
        <td>Gallery 2</td>
        <td>images/image2.jpg</td>
     </tr>
     </table>

美术馆
画廊名称
图库\图像\路径
1.
画廊1
无效的
2.
画廊2
无效的
问题似乎出在子查询上

有人能帮我吗

    <table>
     <tr>
         <th> gallery_id</th>
         <th> gallery_title</th>
         <th> gallery_image_path </th>
     </tr>
     <tr>
        <td>1</td>
        <td>Gallery 1</td>
        <td>NULL</td>
     </tr>
     <tr>
        <td>2</td>
        <td>Gallery 2</td>
        <td>NULL</td>
     </tr>
     </table>
问题在于“i.gallery\u id”=>“g.gallery\u id”-CI正在使用“g.gallery\u id”作为文本字符串构建查询。。。当它可能是表列引用时。如果手动将“g.gallery\u id”替换为“g”。“gallery\u id”应作为演示


如果你不知道如何补救,请留下评论。(这可能只是使用单引号的问题).

问题在于,子查询where条件将您的表别名
g
作为字符串
'g.gallery\u id'
避免CI的保护字段的一种方法是在where条件中将第三个参数传递为false,这样CI就不会试图用反勾保护您的字段或表名

试试这个

 ->where(array('i.gallery_image_status'=>"Enabled",  
               'i.gallery_id'=>"g.gallery_id")) 
或者简单地写下你的从句

 $sub ->select('i.gallery_image_path')
 ->from('nepal_gallery_image AS i')                 
 ->where(array('i.gallery_image_status'=>"Enabled",  
               'i.gallery_id'=>"g.gallery_id"), NULL, FALSE);
                                           //--^^^^^^^^^^^^^^--here 
 ->limit(0,1);

很抱歉,但在什么方面没有达到预期的准确程度?第一次查询中的输出是gallery\u id gallery\u title gallery\u image\u path 1 gallery 1 images/gallery1\u 1234.jpg 2 gallery 2 images/gallery2\u 1234.jpg,但在后面的查询中,输出为gallery\u id gallery\u title gallery\u image\u path 1 gallery 1 NULL 2 gallery 2 NULL似乎子查询存在问题。我认为您应该将其添加到问题中使用单引号没有帮助。问题保持不变。bipen的解决方案提供了解决上述问题的方法。
  $where = "i.gallery_id = g.gallery_id AND i.gallery_image_status =  'Enabled'";
  $sub ->select('i.gallery_image_path')
 ->from('nepal_gallery_image AS i')                 
 ->where($where,NULL,FALSE); 
 ->limit(0,1);