【发布时间】:2018-08-18 08:37:25
【问题描述】:
所以我有这两张桌子:
socc_matches:
`mc_id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
`mc_analystid` int NOT NULL,
`mc_teamid` int NOT NULL,
`mc_date` date NOT NULL,
`mc_hometeam` varchar(60) NOT NULL,
`mc_awayteam` varchar(60) NOT NULL,
`mc_shots` tinyint(40)
socc_shots:
`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
`idmatch` int NOT NULL,
`idplayer` int,
`playername` varchar(60)
我想从 socc_shots 中获取所有 idmatch 等于表 socc_matches order by date 中的 LAST 3 mc_id 的行
注意:idmatch 是 mc_id 的外键
我试过这个查询:
$conn = connection ();
$stmt = $conn->prepare('SELECT * FROM socc_shots INNER JOIN socc_matches ON socc_matches.mc_id = socc_shots.idmatch WHERE socc_matches.mc_id = socc_shots.idmatch ORDER BY socc_matches.mc_date desc LIMIT 3');
if (!$stmt->execute()) {
print_r($stmt->errorInfo());
}
$r = $stmt->fetchAll();
但没有检索到我想要的数据(查询错误)
我错过了什么?
提前致谢。
【问题讨论】:
-
更新您的问题添加适当的数据样本和预期结果
-
@scaisEdge 好的,我会这样做
-
你的 where 子句
WHERE socc_matches.mc_teamid = socc_shots ORDER中似乎有一个没有字段的表,socc_shots后面应该有一个字段名吗? -
附注:您的名字使查询变得难以理解。
mc_id听起来像一个名为mc的表的 ID。是这样吗?什么是mc?idmatch似乎是名为match或matches的表的ID,但是为什么开头没有下划线和id,而在mc_id中,id出现在末尾?两种不同类别的 ID?那么mc_teamid是一个名为mc_team的表的ID 呢?所以mc,不管它是什么,有团队吗? -
这是粗体部分的答案:SELECT * FROM socc_shots WHERE idmatch in (SELECT mc_id FROM socc_matches WHERE mc_teamid = 1 ORDER BY mc_date desc LIMIT 3)
标签: php mysql sql select inner-join