标题可能听起来令人困惑。但这是我的问题。我想显示数据库中显示的内容,但它可能会显示在多行中。例如:
2
2
1
1
1
1
1
1
2
我想显示这些数据,但我不希望它重复,我只想让它显示2s和1s。
我现在拥有的:
$TheSQL = 'SELECT * FROM `table` WHERE `1`="'.$profileID.'" ORDER by RAND() LIMIT 10';
答案 0 :(得分:7)
您可以将SELECT *
更改为SELECT DISTINCT *
。
答案 1 :(得分:2)
使用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
答案 2 :(得分:1)
SQL = 'SELECT DISTINCT * FROM `table` WHERE `1`="'.$profileID.'" ORDER by RAND() LIMIT 10';
... DISTINCT是关键