使MySQL每个条目只返回一行

时间:2017-10-23 18:04:07

标签: php mysql

我的MySQL设置中有两个表。一个有一些材料,一个有各自的权重。每次更新一些材料时,我都会更新权重,在权重表中添加另一行,以便稍后跟踪权重更改(我还包括一些时间戳和内容,但我不会在示例中添加这些内容)下面,为简单起见。)

        Table "Weights"                  Table "Materials"
###############################   ##############################
# ID #  MaterialID  #  Weight #   # Code # Type # Size # Color #
###############################   ##############################
#  1 #      46      #  456.4  #   #  46  #   B  #  13  # Black #   
#  2 #      46      #  453.2  #   #  47  #   D  #  11  # Green #   
#  3 #      47      #  231.1  #   ##############################
#  4 #      47      #  222.0  #
###############################

现在,如果我执行下面这样的查询,我可以获得材料及其相应的权重:

SELECT Materials.Code,
       Materials.Type,
       Materials.Size,
       Materials.Color,
       Weights.Weight
FROM 
       Materials
INNER JOIN Weights ON Weights.MaterialID = Materials.Code
WHERE Materials.Code = 46
ORDER BY Weights.Code DESC
LIMIT 1

结果(显示相应材质的最后一个重量):

#######################################
# Code # Type # Size # Color # Weight #
#  46  #   B  #  13  # Black #  453.2 #
#######################################

到目前为止,这么好,但现在......

如果省略LIMIT和WHERE子句,我会得到多行(这很明显,但现在我已经被卡住了):

#######################################
# Code # Type # Size # Color # Weight #
#  47  #   D  #  11  # Green #  231.1 #
#  47  #   D  #  11  # Green #  222.0 #
#  46  #   B  #  13  # Black #  453.2 #
#  46  #   B  #  13  # Black #  456.4 #
#######################################

我的计划是只使用相应的材料获得最后插入的重量。对于一种材料,一个重量行,如下:

#######################################
# Code # Type # Size # Color # Weight #
#  46  #   B  #  13  # Black #  453.2 #
#  47  #   D  #  11  # Green #  222.0 #
#######################################

我已经尝试在MIN()之间放置一个Weights.Weight,期望它只会选择一个,但是它只会返回一行,即46,而忽略所有其他行。

我一无所知,已经在互联网上搜索过,找到了一些答案,但我对于如何根据自己的需要调整这些答案并不了解。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

这应该有效。我在ID上添加了一个过滤器,只选择与每种材料的最大ID匹配的ID。

SELECT  w.ID , m.Code,
   m.Type,
   m.Size,
   m.Color,
   w.Weight
FROM 
   Materials m
INNER JOIN Weights w ON w.MaterialID = m.Code 
AND 
w.ID IN(SELECT MAX(ID) FROM Weights i WHERE i.MaterialID = m.Code )

答案 1 :(得分:0)

您可以使用:

mysqli_insert_id($连接);

获取查询的最后插入ID。然后,您可以使用它来访问您的其他材料或重量,或者您希望以何种方式生成代码。

E.g。

$latest_id = mysqli_insert_id($connection);

$query ="SELECT whatever FROM wherever WHERE id = '{$latest_id}' ";