Php mySQL查询仅获取显示
我想问一个问题,因为我的查询技能不是很好,上周我一直在学习mySQL。我的附件显示了我运行以下查询时发生的情况:Php mySQL查询仅获取显示,php,mysql,sql,database,mysql-workbench,Php,Mysql,Sql,Database,Mysql Workbench,我想问一个问题,因为我的查询技能不是很好,上周我一直在学习mySQL。我的附件显示了我运行以下查询时发生的情况: SELECT * FROM clothing, sizing WHERE id = "101"; 您可能会注意到,它产生相同的id号、相同的名称、相同类型、相同的品牌id、相同的价格和大量的空值。是否有我可以运行的查询,它只显示没有空值的列 您可以选择给定列中没有空值的行,也可以使用IFNULL IFNULL(yourColumn,0) 这将显示0而不是Null,但请注意Null
SELECT * FROM clothing, sizing WHERE id = "101";
您可能会注意到,它产生相同的id号、相同的名称、相同类型、相同的品牌id、相同的价格和大量的空值。是否有我可以运行的查询,它只显示没有空值的列
您可以选择给定列中没有空值的行,也可以使用IFNULL
IFNULL(yourColumn,0)
这将显示0而不是Null,但请注意Null和0不是同一件事。
Null为“nothing”/undefined,0为数值
使用NULL乘法可能会出现问题,因此可以执行以下操作,例如:
SELECT (numProducts * IFNULL(productPrice,0))
FROM ...
您还可以使用CASE或IF来选择不同的列并将其别名:-)
指向文档的外部链接:只有当该列的默认值设置为null时,上述解决方案才会起作用,如果未设置,则您需要选中空白,我的意思是如果null(productPrice,0)将不起作用,您需要按以下操作 选择(numProducts*IF(productPrice='',0,productPrice))
从…你基本上是在问两个问题,我将在这个答案中分别解决这两个问题 1-返回多条记录 您应该遵循和关于使用
JOIN
的评论
问题中显示的查询是表衣服和尺码之间的查询。查询的基本要求是“我只需要一个表中id为101的记录,以及另一个表中的所有记录”
从你剩下的问题来看,这不是你想要的。所以我认为服装中的行与尺寸之间存在关系。我将假设一件衣服只能有一个尺码,并且此关系由尺码的外键表示。在这里,表应该包含的最小值才能起作用(我不重用您的模型,因为从问题中的细节,我只能猜测,不知道您的确切表模型是什么):
因此,以下查询应返回与所选衣服和相关尺寸对应的所有记录:
SELECT *
FROM clothing AS c
JOIN sizing AS s ON c.size_id = s.size_id
WHERE c.id = 101
您的两个表之间的关系实际上可能与我刚才建模的不同。如果是这样的话,我仍然希望上面的例子足以让你朝着正确的方向开始
2-大量空值
问题的这一部分需要澄清。是您不希望返回某些列的空值记录,还是您只是不希望获取这些列的内容?或者您想使用默认值
如果是要过滤掉的记录,则应在WHERE
子句中添加is NOT NULL
条件。您感兴趣的每一列对应一个
如果是您不想获取的列,请不要使用SELECT*
,而是明确列出您想要的列,例如:
SELECT id, name, price FROM clothing
SELECT name, size, IF(shoulder IS NULL, 'Default', shoulder)
FROM clothing
如果要改为使用默认值,则需要在SELECT
子句中使用If
,如中所示。另一个例子:
SELECT id, name, price FROM clothing
SELECT name, size, IF(shoulder IS NULL, 'Default', shoulder)
FROM clothing
在(第1列、第2列、第3列)中将其更改为其中id=101且不为NULL。您正在从两个表中选择数据:衣服
和尺寸
,但您没有将它们绑定在一起。也许你需要做的是在WHERE
子句中过滤NULL
结果。你必须把一根柱子连接到另一根柱子上。如果使用自然联接,但其中一个表中缺少该联接,则该联接将有效地隐藏该行。如果使用外部联接(或内部联接),则可以选择显示“母亲”表。比如,如果你想展示客户,即使他们没有订单,你也可以考虑外部连接。既然你有衣服和尺码,我想你会使用自然连接。(因为它确实存在,如果它确实存在的话?)。我猜,很难在这张小照片上看到:-)