繁体   English   中英

使MySQL每个条目仅返回一行

[英]Making MySQL return only one row per entry

我的MySQL设置中有两个表。 一种带有某些材料,另一种带有各自的重量。 每次更新一些Material时,我都会更新Weight,在Weights表中添加另一行,以便以后跟踪Weight的变化(我还提供了一些时间戳和内容,但是我不会在下面的示例中添加它们,为简单起见。)

        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 #
#######################################

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

我一无所知,已经在Internet上进行了搜索,找到了一些答案,但是我对如何适应我的需求一无所知。

任何帮助是极大的赞赏。

这应该工作。 我在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 )

您可以使用 :

mysqli_insert_id ($ connection);

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

例如

$latest_id = mysqli_insert_id($connection);

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

等等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM