Как выбрать что-то в MYSQL, не выбирая его дважды, если его в строке

Название может показаться запутанным. Но вот моя проблема. Я хочу показать что-то, что отображается в базе данных, но может отображаться в нескольких строках. Например:

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 – это ключ