【问题标题】:Linking keys to multiple entries with mySQL使用 mySQL 将键链接到多个条目
【发布时间】:2013-02-10 10:09:27
【问题描述】:

我正在为我的网站创建一个搜索功能,因此我从主表中获取关键字,并将这些关键字汇总为通过 id 链接到主表的辅助表中的键。
我的设置如下所示:
-------------------------------------------------- ---
|物品    |
-------------------------------------------------- ---
| ID           |姓名           |价格               |
-------------------------------------------------- ---
| 1             | CPU              | 199.95            |
| 2             | GPU              | 249.95            |
| 3             | GPU              | 225.95            |
-------------------------------------------------- ---

-------------------------------------------------- ---
|键      |
-------------------------------------------------- ---
| ID           |物品名称  | item_id           |
-------------------------------------------------- ---
| 1             | CPU              | 1                     |
| 2             | GPU              | 2                     |
| 3             | GPU              | 3                     |
-------------------------------------------------- ---
请记住,我的表更复杂,为每一行生成许多键。
我的问题是,如果有很多重复的关键字,关键字表会变得非常大。因此,我的问题是:
是否有可能以某种方式在 mySQL 中对每个唯一 item_name 的 id 进行分组,所以如果有人搜索 GPU,输出将是 2 和 3?
我认为您可以使用例如分隔字符串中的值。像这样的逗号:
-------------------------------------------------- ---
| 2            | GPU              | 2,3                  |
-------------------------------------------------- ---
但是我觉得当项目中的一个项目被删除并且我需要更新我的键表并可能从字符串“1,3,5,7,10,15”中删除一个 Id=5 时,它会变得复杂...... 是否有一种将同名键链接到多个条目的智能方法?或者我是否总是需要一个正则表达式,甚至可能是 PHP,来分隔这些值?

【问题讨论】:

    标签: mysql regex search key unique


    【解决方案1】:

    不要在数据库表中使用 CSV,而是使用连接来选择数据。

    您应该能够像这样生成输出:

    select count(*) as cnt
          ,k.item_name
          ,group_concat(k.item_id) as ids
    from keys k
    inner join items i ON (i.id = k.id)
    where i.price = 199.95
    

    group_concat 将即时生成 CSV,因此您不必将 CSV 存储在数据库中。 如果需要多行输出,可以使用group by 子句。

    见:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

    请注意,这与正则表达式无关。

    【讨论】:

    • 所以你说,像我一样存储密钥有意义吗?
    猜你喜欢
    • 2016-10-07
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多