-2

我想在 CodeIgniter 中运行一个查询:

查询是

"SELECT * FROM td_album,td_image
     WHERE td_album.album_id=td_image.album_id
          AND td_album.album_id='$id'
          AND (td_image.image_name='$name' OR td_image.image_id='$image_id');"

我使用活动记录在 CI 中编写了这个查询:

$query = $this->db->select('*')
                        ->from('td_image')
                        ->join('td_album', 'td_album.album_id = td_image.album_id')
                        ->like('td_image.image_id', $descp)
                        ->or_like('td_image.image_name', $descp)
                        ->like('td_album.album_id',$a_id)
                        ->get('', $this->limit, $this->offset);

但我面临一个问题。假设我有两张 id12. 我只想显示专辑的图像1。上面的 CI AR 查询正在返回所有图像的结果,即显示两个相册的图像,这不应该发生。

实际上它应该显示来自album_id为1的相册中的图像。

现在我意识到上面的 CI AR 查询代表:

"SELECT * FROM td_album,td_image
         WHERE td_album.album_id=td_image.album_id
              AND td_album.album_id LIKE'$id'
              OR td_image.image_name LIKE'$name' AND td_image.image_id LIKE'$image_id';"

所以它显示了所有的图像。我的要求是只显示一张专辑的图像。

所以,我需要 CI AR 查询等同于这个 MYSQL 查询

"SELECT * FROM td_album,td_image
             WHERE td_album.album_id=td_image.album_id
                  AND td_album.album_id LIKE'$id'
                  AND (td_image.image_name LIKE'$name' OR td_image.image_id LIKE'$image_id');"

如何将最后一个查询转换为 CI AR?我想要一个具有like() or_like().

4

2 回答 2

3

几天前我刚刚遇到了这个问题。Active Records 不支持在 () 中对 where 子句进行分组,因此您需要将 where 子句的那一部分放在变量中。

$where = "(td_image.image_name LIKE'$name' OR td_image.image_id LIKE'$image_id')";
$this->db->where($where);
于 2013-02-09T03:46:19.507 回答
1

也许你可以只使用 $this->db->query('YOUR QUERY HERE'); 对于复杂的查询。

IE

$My_SQL_Query = $this->db->query("SELECT * FROM td_album,td_image WHERE td_album.album_id=td_image.album_id AND td_album.album_id LIKE'$id' AND (td_image.image_name LIKE'$name' OR td_image.image_id LIKE'$image_id')");

 foreach($My_SQL_Query->result() as $Row){
    echo "-------<br />".print_r($Row)."<br />-------<br /><br />";
 }

希望这会有所帮助:)

于 2013-02-09T03:56:13.480 回答