【问题标题】:where condition from a comma seperated varchar in mysql and codeigniterwhere 条件来自 mysql 和 codeigniter 中逗号分隔的 varchar
【发布时间】:2013-09-15 18:44:44
【问题描述】:

我有两个名为 music_types 和 music_albums 的表,其中 music_types 由 type_name 和一个自动增量 id 组成,其中 music_albums 表中包含自动增量 id 、 name 、 types 这是一个 varchar ,它将 music_types 的 id 存储为逗号分隔1,2,3,4 等值 所以谁能帮我从音乐专辑表中获取所有类型 x 的专辑。

我试过mysql之类的,但它不正确。 所以请帮我写这个查询..

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

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

提前致谢。

【问题讨论】:

  • 了解一下FIND_IN_SET,它会对您有所帮助

标签: mysql codeigniter activerecord


【解决方案1】:

试试这个,但@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()

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我知道,这是一个 joomla 组件表设计,我正在为一个返回音乐事件、歌曲等的 android web 服务编写脚本。但事实是,我无法更改表设计,如果是这样,我必须重写整个组件。但我不擅长 joomla 编程。谢谢。
    • 然后在你的加入条件中使用find_in_set
    【解决方案3】:

    您的类型数据和专辑数据之间存在所谓的多对多关系。正如@juergen 提到的,尝试像您正在做的那样在一列中存储多个值是不正确的。快速的 Google 搜索将为您提供所需的大量信息,但基本上您需要第三个“映射”表,将专辑及其类型简单地映射在一起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-31
      • 2023-02-03
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 2017-04-21
      相关资源
      最近更新 更多