【问题标题】:store more than one value into a db field to be retrieved as separate values将多个值存储到数据库字段中以作为单独的值检索
【发布时间】:2016-12-27 23:51:57
【问题描述】:

是否可以存储多个值并查询数据库并将每个值分配为单独的实体?

例如,我有一个包含wallpaper 列的数据库,我可以将其存储到其中吗?

wall_1.png、wall_2.png、wall_3.png

然后查询数据库并提取 3 个保存壁纸名称的不同变量。

所以我有 $defaultWall = "wall_1.png" $wall2 = "wall_2.png" $wall3 = "wall_3.png"

我还有一个叫做设置的表,用户可以在这里设置他们的所有设置。一栏是他们个人资料的壁纸偏好。如果他们以后选择更改,我希望他们手头上有一系列上传的壁纸。因此,通过这样做,我想将一组壁纸 url 存储到数据库中,并有一个很小的图像预览库从数据库中提取每个壁纸进行处理和调整大小。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    是的,你可以。但表格字段中的多个值不满足规范化形式。

    尝试为这一行创建一个带有壁纸的表格。

    【讨论】:

    • 我有一个表叫设置,用户可以在这里设置所有的设置。一栏是他们个人资料的壁纸偏好。如果他们以后选择更改,我希望他们手头上有一系列上传的壁纸。因此,通过这样做,我想将一组壁纸 url 存储到数据库中,并有一个小的图像预览库拉每个壁纸进行处理和调整大小。
    • +1,最终发布者可能想要淘汰/替换旧壁纸,如果它们在单独的表中,则可以通过查询来识别它们。如果他们被挤进同一列,那就很痛苦了。
    • @s2xi - 一个设置表和一个壁纸子表,其中一个设置可以有多个壁纸?我知道现在这似乎是额外的工作,但它会在未来为您节省时间和麻烦:)
    • Alexander 是正确的,因为更新和搜索此字段即使不是不可能的工作也很困难,如果不是您的情况,我建议使用 XML 数据类型而不是简单数据类型。
    • 你的意思是有一个表来存储他们拥有的所有壁纸,并在设置中根据他们从壁纸表中选择的内容加载他们拥有的默认壁纸?
    【解决方案2】:

    从 DDL 逻辑来看,正确的方法是为壁纸图像定义另一个表,该表具有将它们链接到该表的行的外键,该表在您的情况下具有壁纸列。

    如果您找不到任何理由这样做,并且您只使用 PHP,请使用 serializeunserialize php 函数从该字段访问该数据。您可以通过这种方式存储任何数据结构。

    【讨论】:

    • 是的,这就是我要找的。一个序列化的场景。我的问题是,当我尝试存储时会得到类似 s1: s2: s3
    • @s2xi 你看错了方向。不要跛脚,试着听听每个人都告诉过你。
    • 如果您使用序列化,数据将取决于操作它的应用程序。对于非常小的应用程序可能更简单,但是当您构建更多代码时,您会因为没有将它们放在单独的表中而诅咒自己。
    【解决方案3】:

    看看 PHP 中的 expand() 函数!

    http://www.php.net/manual/en/function.explode.php

    注意 如果您希望能够将任意数量的壁纸(或没有)链接到我会选择使用另一个表的对象,我认为这不是处理此类值的最佳方式。

    create table tblMain (ItemId, Name, etc)
    create table tblWallpapers (WallpaperId, WallpaperName)
    create table tblMainUsesWallpapers (Wallpaperid, ItemId)
    

    然后只需像这样选择值:

    select * from tblWallpapers w
    inner join tblMainUsesWallpapers muw
    on w.WallpaperId = muw.WallpaperId
    inner join tblMain m
    on muw.ItemId = m.ItemId
    where m.ItemId = x
    

    【讨论】:

    • 我正在查看,但另一个问题是我还需要在字段中存储更多值。
    • 这应该没问题,split() 函数可以返回任意数量的值,只要它们用相同的字符(“,”)分隔即可。然后只需遍历拆分项数组
    • 我关注了你的链接,上面写着Warning This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged. 你自己读过那个页面吗?
    • 好吧,然后尝试explode() - 它做同样的事情php.net/manual/en/function.explode.php
    • 如果你再看一遍,弹片,我也在回答中说我不推荐这种解决方案,但这可能与你的论点无关。
    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2015-02-22
    • 2022-06-18
    • 2015-03-18
    相关资源
    最近更新 更多