根据Codeigniter中先前查询的结果运行查询

时间:2011-12-29 13:31:15

标签: codeigniter

希望有人可以帮助我。我已经使用PHP一段时间了,但我是Codeigniter的新手。

基本上我在两个单独的数据库上有两个表,分别称为“照片”和“用户”。 “照片”包含有关用户想要查看的照片的信息,然后“用户”包含拥有该照片的用户的信息。

以下是代码:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Viewphoto_model extends CI_Model {


    public function get_photo($id)
    {
        $db_photos = $this->load->database('photos', TRUE);
        $db_photos->select('*');
        $db_photos->select("DATE_FORMAT(uploaddate, '%d/%m/%y') as uploaddate_formatted", FALSE);
        $db_photos->from('photos');
        $db_photos->where('approved', '1');
        $db_photos->where('id', $id);

        $query = $db_photos->get();
        return $query->row();
    }
}

所以基本上它根据用户输入到URL中的ID来抓取数据库中的行。

工作正常。

“照片”表中的每一行都是一个用户ID号,它是“用户”数据库/表中行的ID号。我希望能够根据“照片”表格中行中的ID号从“用户”表中获取相关行。

我一直试图找到答案,但到目前为止还没有运气。我是想在两个数据库之间进行连接,还是可以将get_photo函数中的值传递给运行第二个查询的第二个函数?怎么办呢?

我想要的方法是从第一个查询的结果中获取userid值,然后将其放入第二个函数的第二个查询中?我该怎么做?

非常感谢任何帮助:)

谢谢!

1 个答案:

答案 0 :(得分:1)

这应该在理论上有效,而不是使用codeigniter AR进行太多实践。

$db_photos->select(
      "u.*, DATE_FORMAT(p.uploaddate, '%d/%m/%y') as uploaddate_formatted"
      , FALSE);
$db_photos->from('photos as p');
$this->db->join('users as u', 'u.id = p.user_id', 'left');

包括你的where子句......

注意{如果您没有找到用户,那么他们的照片是? }

试试这个

//Should work Provided!! Configs are in this Order
//$db['photos']['']
//$db['default']['']


//First Query ( Users ) 
$q1 = $this->db->get_where('users', array('id'=>$id));


//Second Query (photos)
$db_photos = $this->load->database('photos', TRUE);
$q2 = $db_photos->select("DATE_FORMAT(uploaddate, '%d/%m/%y') as uploaddate_formatted", FALSE)
                  ->from('photos')
                  ->where('approved', (int)1);
                  ->where('userid', $q1->row()->id)
                  ->get();

var_dump($q1);
var_dump($q2);

//you job now is to build and object/array of the combined queries
//I dont know enough about the outcome to make those judgments
相关问题