如何在MYSQL中选择一些内容而不选择它在行中的两次

时间:2012-02-23 21:21:12

标签: php mysql select

标题可能听起来令人困惑。但这是我的问题。我想显示数据库中显示的内容,但它可能会显示在多行中。例如:

2
2
1
1
1
1
1
1
2

我想显示这些数据,但我不希望它重复,我只想让它显示2s和1s。

我现在拥有的:

$TheSQL = 'SELECT * FROM `table` WHERE `1`="'.$profileID.'" ORDER by RAND() LIMIT 10';

3 个答案:

答案 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是关键