Название может показаться запутанным. Но вот моя проблема. Я хочу показать что-то, что отображается в базе данных, но может отображаться в нескольких строках. Например:
2 2 1 1 1 1 1 1 2
Я хочу отображать эти данные, но я не хочу, чтобы это повторялось, я просто хочу, чтобы он показывал 2s и 1s один раз.
Что у меня есть сейчас:
$TheSQL = 'SELECT * FROM `table` WHERE `1`="'.$profileID.'" ORDER by RAND() LIMIT 10';
Вы можете изменить SELECT *
для SELECT DISTINCT *
.
Использование DISTINCT
DISTINCT
позволяет удалять повторяющиеся строки из результирующего набора. Он используется следующим образом:
SELECT DISTINCT * FROM tablename
Имейте в виду, что DISTINCT
применяется ко всем возвращенным столбцам в наборе результатов. Итак, если вы возвращаете несколько полей и хотите применить их к определенному полю, DISTINCT
не будет ответом.
Например, учитывая следующий набор данных:
user_id whatever ---------------------- 1 this 1 that 2 this 2 this
Следующий запрос:
SELECT DISTINCT user_id, whatever FROM tablename
Возвращает:
1 this 1 that 2 this
Он удалил только дубликат 2, this
строку, поскольку рассматривал оба столбца, это был единственный дубликат.
Однако, если я выберу один столбец, например:
SELECT DISTINCT user_id FROM tablename
Я получу следующие, желаемые результаты:
1 2
Использование GROUP BY
Таким образом, в случае, когда вы выбираете несколько столбцов, но хотите, чтобы только один из столбцов был отдельным, вы можете использовать GROUP BY
следующим образом:
SELECT DISTINCT user_id, whatever FROM tablename GROUP BY user_id
Это дает следующие результаты, возвращая только одну строку на отдельный user_id:
1 this 2 this
Хотя, эти результаты могут быть такими же вероятными:
1 that 2 this
Значение негруппового столбца будет произвольным. Фактически, MySQL 4.x даже не примет вышеуказанный запрос GROUP BY
. MySQL 4.x не позволяет смешивать агрегатные (сгруппированные) и неагрегатные столбцы. Поэтому предпочтительным был бы следующий запрос:
SELECT DISTINCT user_id, MAX(whatever) FROM tablename GROUP BY user_id
Теперь результаты для второго столбца не являются произвольными:
1 this 2 this
SQL = 'SELECT DISTINCT * FROM `table` WHERE `1`="'.$profileID.'" ORDER by RAND() LIMIT 10';
… DISTINCT – это ключ