Php 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

我想问一个问题,因为我的查询技能不是很好,上周我一直在学习mySQL。我的附件显示了我运行以下查询时发生的情况:

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
结果。你必须把一根柱子连接到另一根柱子上。如果使用自然联接,但其中一个表中缺少该联接,则该联接将有效地隐藏该行。如果使用外部联接(或内部联接),则可以选择显示“母亲”表。比如,如果你想展示客户,即使他们没有订单,你也可以考虑外部连接。既然你有衣服和尺码,我想你会使用自然连接。(因为它确实存在,如果它确实存在的话?)。我猜,很难在这张小照片上看到:-)