其中条件来自逗号分隔的varchar在mysql和codeigniter中

时间:2013-09-15 18:44:44

标签: mysql codeigniter activerecord

我有两个名为musical_types和musical_albums的表,其中musical_types由type_name和一个自动增量id组成,其中,在musical_albums表中包含自动增量id,名称,类型是varchar,它将musical_types的id存储为逗号分隔值1,2,3,4等 所以任何人都可以帮助我从musical_albums表中获取x类型的所有专辑。

我试过像mysql一样,但是不正确。 所以请帮我写这个查询..

我使用codeigniter,是否可以在codeigniters活动记录类中编写上述查询。

另一点是这是一个joomla组件表设计,并且我为一个返回音乐事件,歌曲等的android webservice编写脚本。

提前致谢。

3 个答案:

答案 0 :(得分:4)

试试这个,但@juergen已经提到过不要将值存储为逗号分隔,这会导致现在可以执行以下操作的痛苦

$this->db->select('*');
$this->db->from('musical_albums');
 //$this->db->join('second table name', 'relation id of 1st table = relation id of 2nd table');
 //Custom string: in where 
$where = " FIND_IN_SET('x',`types`)";
$this->db->where($where);
$query = $this->db->get();

Active Record

FIND_IN_SET()

答案 1 :(得分:0)

从不,永远不会在一列中存储多个值!

就像你现在看到的那样,这只会让你感到头痛。规范化你的表格。然后你可以正常加入。

答案 2 :(得分:0)

您所拥有的内容是您的类型数据和相册数据之间的多对多关系。正如@juergen所提到的,尝试在一个列中存储多个值就像你正在做的那样是不正确的。快速谷歌搜索将为您提供所需信息,但基本上您需要第三个“映射”表格,只需将相册及其类型映射到一起。