【问题标题】:MYSQL searching for ID in array from DBMYSQL从数据库中搜索数组中的ID
【发布时间】:2014-06-23 15:51:44
【问题描述】:

我已经完成了搜索,但我找到的所有内容都与我需要的方式相反。

我有一个数据库,其中一个字段是一串 ID,我想在数据库中已有的数组中搜索某个 ID。

例如,在数据库中它看起来像这样:

ID    Title    Spots Used
 1    test 1    1,3,5,8
 2    test 2    4,2,5,6,7
 3    test 3    3,5,2,1

我需要搜索有多少广告系列使用了 ID 为 2 的位置(应该返回测试 2 和测试 3)。

解决此问题的最佳方法是什么?到目前为止,我可以查询整个事情,逐行运行,然后用strpos 搜索数字,但问题是当我最终上传超过 10 个点时,1 将返回 1、10、11 , 12, 13 等等。

如果我需要提供更多信息,请告诉我。

【问题讨论】:

  • SELECT * FROM campaigns WHERE 2 IN (Spots Used) 什么的?
  • 标准化数据库,这将有很大帮助
  • 那么,我可以在IN 子句中使用一个字段吗?在我读过的任何文档中,我都找不到。
  • @Fred-ii- 你看过数据了吗?他不是在尝试查找与值数组匹配的字段,而是在包含逗号分隔值列表的字段中查找值。 in 不会成功。
  • 我的错误@GolezTrol 感谢您指出这一点。评论已删除。

标签: php mysql sql arrays search


【解决方案1】:

如果这些 id 以逗号分隔,那么您可以使用 FIND_IN_SET()

SELECT * FROM `table` WHERE FIND_IN_SET('2',`column_name`) >0

但是如果您能够更改架构然后首先规范化您的表结构,那么存储逗号分隔值是个坏主意

Database Normalization

【讨论】:

  • 看起来这行得通!挣扎了一个多小时。谢谢
  • @BrianLogan:这暂时可行,但你真的需要看看最后一个链接。这样可以省去很多麻烦。
【解决方案2】:

您可以将所有内容都放在一张表中,但请看一下关系数据库有什么好处,

再创建两个表,一个是 Spot(id,spot_number),另一个是 Campaigns_spot(id_campaign,id_spot),然后让 sql 引擎通过查询来完成,这种方式效率更高,您将继续使用正确的数据库关系。

那么查询将是

select count(*) from campaign_spot where id_spot= X (whatever number you want).

【讨论】:

    猜你喜欢
    • 2014-04-30
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 2016-03-22
    相关资源
    最近更新 更多