【问题标题】:Run query based on result of previous query in Codeigniter根据 Codeigniter 中先前查询的结果运行查询
【发布时间】:2011-12-29 13:31:14
【问题描述】:

希望有人可以帮助我解决这个问题。我使用 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 号从“用户”表中获取相关行。

我一直在努力寻找答案,但到目前为止还没有运气。我是否想跨 2 个数据库进行连接,或者可能将 get_photo 函数中的值传递给运行第二个查询的第二个函数?怎么办?

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

非常感谢任何帮助:)

谢谢!

【问题讨论】:

    标签: codeigniter


    【解决方案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
    

    【讨论】:

    • 虽然这些表位于不同的数据库中,但如何对位于两个数据库中的两个表进行连接?
    • 不确定 codeigniter 是否允许多个数据库连接,您可以尝试附加一组新的数据库配置规则。所以 $config['default']['..'] 是默认值,添加类似 $config['connection2']['...']
    • 是的,我已经在配置文件中为我的第二个数据库创建了第二组数据库值。我只是不知道如何加入表,或者从第一个查询的“用户 ID”字段中获取值,然后在第二个函数的第二个查询中使用它。
    • 您现在无法加入,您需要进行 2 次查询... 1. 从 connection1 中获取您的照片时间戳 + user_id,2. 从 connection2 中获取 id=user_id 的用户跨度>
    • 这就是我的想法,但是如何从第一个查询的结果创建一个变量,然后将其传递给第二个函数(它将在第二个查询中使用)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多