2012-03-21 24 views
1

我目前正在學校系統中開設家長課程和兒童課程(Moodle中的meta_courses)。如何使用MySQL檢索數據,這樣我就不會在單個列中獲取重複值?

所以,我們有一個表mdl_course_meta,它有3個字段。 Id,parent_course和child_course。

我的問題是,一個家長課程可以有很多孩子課程,這意味着,例如,一個parent_course = 50可以在表中出現兩次,這意味着它有兩個子課程。我只是希望能夠找到所有的父級課程,而不需要兩次或多次返回相同的值。我目前正在使用這個查詢,它顯然不會做我想要的:

$q = "SELECT * FROM mdl_course_meta"; 

我正在使用PHP以及順便說一句。

非常感謝。

+0

可能的重複[如何選擇MYSQL中的某些東西,而不選擇它兩次,如果它在行中](http://stackoverflow.com/questions/9421508/how-do-i-select-something-in-mysql - 無需選擇它兩次 - 如果它在行) – 2012-03-21 17:39:10

回答

2
SELECT DISTINCT parent_course from mdl_course_meta 

這應該這樣做,如果你只是想要的課程名稱。有一件事要記住,如果你想要其他領域不會按照你想要的方式工作(如果有多個記錄具有相同的parent_course並且你只需要一個記錄,它將如何知道選擇哪條記錄)。

只有當您只想返回parent_courses而沒有重複時,才能使用此方法。

2

DISTINCT有助於消除重複。如果查詢返回包含重複行的結果,則可以刪除重複項以生成每行都是唯一的結果集。爲此,請在SELECT之後和輸出列表之前包含關鍵字DISTINCT。

$q = "SELECT DISTINCT parent_course FROM mdl_course_meta"; 
+0

啊,對不起。我不清楚。我不想在列上重複值! – 2012-03-21 17:10:59

1

如果你不想在列重複的值,使用GROUP BY parent_course。 通過這種方式,您可以自由選擇任何列。

+0

做一個選擇*使用組會得到有趣的結果(它將如何知道該父級返回哪個child_course?) – jzworkman 2012-03-21 17:12:57

+0

謝謝,這就是我使用 – 2012-03-21 17:13:11

+0

$ q =「SELECT parent_course FROM mdl_course_meta GROUP BY parent_course」; 這個工作,而不是有*? – 2012-03-21 17:14:05

0

如果你只是想爲特定列的列不同的值,那麼你可以使用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 

這樣,值不是任意的。你已經指定了你想要的。

相關問題