[英]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.