我的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,而忽略所有其他行。
我一无所知,已经在互联网上搜索过,找到了一些答案,但我对于如何根据自己的需要调整这些答案并不了解。
非常感谢任何帮助。
答案 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}' ";
等