Php 我可以连接两个表,在MySQL中一个表的每一行只有一个匹配项吗?
我有一张桌子,一张桌子,一张桌子,还有一张桌子,我称之为课程——也就是说,一个由特定的人在特定的地方教授的课程的实例。我想拉一个表,它基本上只显示基于某些课程参数的活动类。例如: CLASSES class_id|class_name --------|------------ 1|Class One 2|Class Two 3|Different Class etc... COURSES course_id|class_id|room ---------|--------|-------- 1| 3| 1 2| 3| 2 3| 1| 1 4| 3| 1 5| 3| 2 6| 2| 1 etc... 但我只想得到: class_id| class_name |course_id|room --------|--------------|---------|-------- 1|Class One | 3| 1 2|Class Two | 6| 1 3|Diferent Class| 1| 1 etc... 我能让它只在班级中每一行的第一场比赛中加入吗?我是MySQL的新手,所以我有点难以清楚地表达我想做的事情;我道歉 另外:我正在通过PDO将所有这些都拉到PHP中——也许有一种特定的方法可以在PDO中实现这一点 通过更改子查询中的ORDERBY子句,您可以定义哪些类将返回id最少或最大的类,等等 GROUP BY允许您聚合指定字段的结果,因此在本例中,它将只使用classes.class_id、classes.name、COURCES.room的唯一元组 欲知详情Php 我可以连接两个表,在MySQL中一个表的每一行只有一个匹配项吗?,php,mysql,Php,Mysql,我有一张桌子,一张桌子,一张桌子,还有一张桌子,我称之为课程——也就是说,一个由特定的人在特定的地方教授的课程的实例。我想拉一个表,它基本上只显示基于某些课程参数的活动类。例如: CLASSES class_id|class_name --------|------------ 1|Class One 2|Class Two 3|Different Class etc... COURSES course_id|class_id|room -------
如果您只需要课程表中的一条记录,您需要哪一条?IE:总是最低的课程和房间?价值?老实说,这无关紧要。你说得对,我应该说的。我只是去寻找班级数据;我选择COURSE的唯一原因是只获取那些具有正确标准的相应课程的类。不选择courses列并不意味着输出不会重复。@OMG Ponies,但是group by willi添加了group by约束,这个问题的查询没有选择任何关于课程的数据。这似乎正是我想要的。有没有理由不使用GROUP BY?那么Ben Saufley对他自己的问题的评论就很清楚了这似乎是可行的,但执行起来花了phpMyAdmin 76秒。知道是什么引起的吗? class_id| class_name |course_id|room --------|--------------|---------|-------- 1|Class One | 3| 1 2|Class Two | 6| 1 3|Diferent Class| 1| 1 etc...
SELECT cl.class_id, cl.class_name, c.course_id, c.room
FROM classes cl
JOIN courses c
ON c.course_id =
(
SELECT ci.course_id
FROM courses ci
WHERE ci.class_id = cl.class_id
AND ci.room = 1
ORDER BY
ci.class_id, ci.course_id -- or whatever
LIMIT 1
)
SELECT
classes.class_id,
classes.name,
courses.room
FROM classes
JOIN courses
ON classes.class_id=courses.class_id
WHERE courses.room=1
GROUP BY classes.class_id,classes.name,courses.room