多个表连接条件语句

时间:2013-02-09 03:20:25

标签: mysql codeigniter activerecord

我想在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);

但我遇到了问题。假设我有两张ID为12的相册。我想仅显示相册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()的查询。

2 个答案:

答案 0 :(得分:3)

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

$where = "(td_image.image_name LIKE'$name' OR td_image.image_id LIKE'$image_id')";
$this->db->where($where);

答案 1 :(得分:1)

也许你可以使用$ this-> db->查询('你在这里查询');对于复杂的查询。

$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 />";
 }

希望这有用:)