Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我可以连接两个表,在MySQL中一个表的每一行只有一个匹配项吗?_Php_Mysql - Fatal编程技术网

Php 我可以连接两个表,在MySQL中一个表的每一行只有一个匹配项吗?

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

我有一张桌子,一张桌子,一张桌子,还有一张桌子,我称之为课程——也就是说,一个由特定的人在特定的地方教授的课程的实例。我想拉一个表,它基本上只显示基于某些课程参数的活动类。例如:

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的唯一元组

欲知详情

如果您只需要课程表中的一条记录,您需要哪一条?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