【问题标题】:Codeigniter Active Records LIKE QueryCodeigniter 活动记录 LIKE 查询
【发布时间】:2013-07-08 18:36:19
【问题描述】:

我正在使用 Codeigniter 制作一个新闻网站,并且我有一个 Articles MySQL 表,例如 ID、Title、Body、Categories、Created 等...

在“类别”字段中,我有用逗号(,)分隔的类别,例如...

  • 第 1 条分类:国家、犯罪、电影
  • 第2条分类:民族、城市、戏剧
  • 第三条分类:搞笑、国际、电影
  • 第 4 条分类:国家、犯罪、电影

我想获取具有特定类别的文章.. 比如 National (1,2,4)。 我尝试了很多方法,但似乎没有任何效果。

请帮忙谢谢。

【问题讨论】:

  • 由于它还没有完成,我真的会考虑改变数据库结构......你应该有单独的类别表,以及一个用于文章类别连接的附加表(id,cat_id,article_id)。然后你可以相对容易地得到你想要的东西。如果你想保留这个方案:stackoverflow.com/questions/9302967/… 也许这会有所帮助。

标签: php mysql codeigniter


【解决方案1】:

您可以使用FIND_IN_SET 方法查询您的Categories 字段

FIND_IN_SET('Crime', your_table.Categories)

您的方法有许多缺点,从长远来看,将您的表关系更改为Categories 会更具可扩展性。您可以使用多对多关系和连接表来更轻松地查询您的类别。

FIND_IN_SET 会进行全表扫描,使用这种逗号分隔的方式将很难聚合,并获取文章/类别计数。


Is storing a delimited list in a database column really that bad?

Bill Karwin 已将这种反模式作为其优秀著作的第一章。

【讨论】:

  • 感谢您的回复...我一定会尝试您的方法并让您知道它是否有效。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 2011-08-28
  • 1970-01-01
相关资源
最近更新 更多