【问题标题】:SQL isset and not showing blank 'cells'SQL isset 并且不显示空白“单元格”
【发布时间】:2010-06-24 07:41:13
【问题描述】:

我将我的一个 MySQL 数据库表用作实际表,每一列是一天中的时间,一列称为 day。你猜对了,在 day 中表示星期几,在其余单元格中表示当时正在发生的事情。

我想要做的只是显示其中有价值的单元格。就我而言,我总是将所有行和 2 列都填满。两列是“day”和“19:00”,但将来我可能会添加“18:00”等值。

那么,我怎样才能只选择其中包含数据的列和行?某种类型的“WHERE:有数据”?

谢谢!

编辑:图片

【问题讨论】:

    标签: sql mysql select where


    【解决方案1】:

    将时间或日期作为列意味着您的字段名称中有数据。数据属于表内,所以你应该规范化数据库:

    table Calendar
    --------------
    Day
    TimeOfDay
    Appointment
    

    这样您就不会在表中得到很多空字段,并且您不必更改数据库设计来添加一天中的另一个时间。

    现在您可以轻松地仅获取存在的时间:

    select Day, TimeOfDay, Appointment from Calendar
    

    【讨论】:

    • 这与其说是日历,不如说是我正在制作的在线广播(以及所有不同的 DJ 以及他们何时广播)的“时间表”。此外,我不需要添加新时间或半小时时间等。
    • 感谢您的澄清。我明白了,但是查看起来不太友好,我想用数据创建一个表。
    • @Sam:根据数据创建表是您应该在用户界面中执行的操作。您不应该根据数据库的显示方式来构建数据库。
    • 我知道这是非常规的,但它是我正在尝试做的一个很好的解决方案。
    • @Sam 这显然不是因为从您的链接问题中,您现在坚持编写 24 列 WHERE 子句!在这一点上,你不认为可能有更好的方法吗?您可以使用数据透视查询将其恢复为适合显示的格式,但以更易于搜索的格式存储。
    【解决方案2】:

    据我所知,您正在寻找类似的东西

    WHERE col1 IS NOT NULL
    

    但是,如果您可以详细说明您的架构,尤其是如果您可以绘制示例表,那将会很有帮助。

    【讨论】:

    • 这听起来像我想要的:)。你想让我张贴一张 PHPmyAdmin 正在显示的图片吗?
    • 另外,有没有办法说“除了'Day'之外的所有列都不为NULL'。我可以把它写进去,但是它会是一个很长的查询,我相信一个更短的查询是可能的?
    • 是的,这样的图片可能会有所帮助。
    • 不,没有办法为“除day之外的所有列”设置条件,你必须写成where not ([00:00] is null and [01:00] is null and [02:00] is null and ... and [21:00] is null and [22:00] is null and [23:00] is null)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多