2012-02-23 59 views
1

標題可能聽起來很混亂。但這是我的問題。我想顯示數據庫中顯示的內容,但可能會顯示爲多行。例如:如何選擇MYSQL中的某些內容,而不是在行中選擇它兩次

2 
2 
1 
1 
1 
1 
1 
1 
2 

我想顯示此數據,但我不希望它重複,我只是希望它顯示2秒和1次。

我現在擁有的一切:

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

回答

7

您可以更改SELECT *SELECT DISTINCT *

+0

「集團通過」還將工作 – Ray 2012-02-23 21:28:15

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

... DISTINCT是關鍵

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 
相關問題