我如何用MySQL检索数据,这样我就赢了';不要在一列中获取重复的值


How do I retrieve data with MySQL such that I won't be getting duplicate values in a single column?

我目前正在开发一个学校系统,我们有一个家长课程和一个孩子课程(Moodle中的meta_courses)。

因此,我们有一个表mdl_course_meta,它有3个字段。Id、parent_course和child_course。

我的问题是,一个父课程可以有许多子课程,这意味着,例如,parent_course=50可以在表中出现两次,这意味着您有两个子课程。我只想能够找到所有的家长课程,而不会两次或多次返回相同的值。我现在正在使用这个查询,它显然不能满足我的要求:

$q = "SELECT * FROM mdl_course_meta";

顺便说一下,我也在使用PHP。

非常感谢。

SELECT DISTINCT parent_course from mdl_course_meta

如果你只想要课程名称,那就应该这样做。需要记住的一点是,如果你想要其他字段,这不会按照你想要的方式工作(如果有多个记录具有相同的parent_course,而你只想要一个,它怎么知道该选择哪个记录)。

只有当您只想返回不重复的parent_courses时,才能使用此方法。

DISTINCT有助于消除重复。如果查询返回的结果包含重复的行,则可以删除重复的行以生成其中每一行都是唯一的结果集。为此,请在SELECT之后和输出列列表之前包含关键字DISTINCT。

$q = "SELECT DISTINCT parent_course FROM mdl_course_meta";

如果不希望在单个列中出现重复值,请使用GROUP BY parent_course。通过这种方式,您可以自由选择任何列。

如果您只想要特定列的不同值,那么您可以使用GROUP BY:

SELECT *
FROM mdl_course_meta
GROUP BY parent_course

其他列中的值将是任意的。这将在MySQL 5.x中工作。

MySQL 4.x不会让你随意,所以你不能混合聚合列和非聚合列。相反,你必须做这样的事情,这会变得有点复杂:

SELECT MAX(col1), MAX(col2), parent_course, MAX(col4), ...
FROM mdl_course_meta
GROUP BY parent_course

这样,这些值就不是任意的。你已经指定了你想要的。