Как мне получить данные с MySQL, чтобы я не получал повторяющиеся значения в одном столбце? - PullRequest
1 голос
/ 21 марта 2012

В настоящее время я работаю над школьной системой, в которой у нас есть родительский курс и дочерний курс (meta_courses в Moodle).

Итак, у нас есть таблица mdl_course_meta, и она имеет 3 поля.Id, parent_course и child_course.

Моя проблема заключается в том, что родительский курс может иметь много дочерних курсов, что означает, например, что parent_course = 50 может появиться в таблице два раза, что означает, что у него есть 2 дочерних курса.Я просто хочу найти все родительские курсы, не возвращая одно и то же значение дважды или более раз.Сейчас я использую этот запрос, который явно не выполняет то, что я хочу:

$q = "SELECT * FROM mdl_course_meta";

Кстати, я тоже работаю с PHP.

Большое спасибо.

Ответы [ 4 ]

2 голосов
/ 21 марта 2012

DISTINCT помогает устранить дубликаты.Если запрос возвращает результат, содержащий повторяющиеся строки, вы можете удалить дубликаты, чтобы создать набор результатов, в котором каждая строка уникальна.Для этого включите ключевое слово DISTINCT после SELECT и перед списком выходных столбцов.

$q = "SELECT DISTINCT parent_course FROM mdl_course_meta";
2 голосов
/ 21 марта 2012
SELECT DISTINCT parent_course from mdl_course_meta

Это нужно сделать, если вы просто хотите, чтобы названия курсов.Следует помнить одну вещь: если вам нужны другие поля, это не сработает так, как вы хотите (как он узнает, какую запись выбрать, если существует несколько записей с одним и тем же parent_course и вам нужна только одна).

Этот подход можно использовать только в том случае, если вы хотите вернуть только parent_courses без дубликатов.

1 голос
/ 21 марта 2012

Если вы не хотите дублировать значения в столбце single , используйте GROUP BY parent_course.Таким образом, вы можете выбрать любой столбец.

0 голосов
/ 21 марта 2012

Если вам нужны только отдельные значения для определенного столбца столбца, вы можете использовать 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

Таким образом, значения не являются произвольными. Вы указали те, которые вы хотите.

...