2011-07-20 64 views
1

我有一個數據庫,其字段爲type1,type2,type3,type4一直到type19,以及其他字段。我試圖做的是從這些行中獲取所有字段,然後只回顯不重複的字段。來自PHP/MYSQL查詢的唯一/獨特值

我一直在使用select distinct type1, type2 etc from products嘗試,但不知道PHP代碼把所有的字段($_row['type1']$_row['type2']等)集成到一個變量,然後回顯所有不同值的變量。有沒有人有什麼建議?

回答

3

遍歷你的結果,並將它們添加到一個數組。然後使用array_unique()僅返回唯一值。

http://php.net/manual/en/function.array-unique.php

如果可能的話不過,你一定要重新考慮你的數據庫設計,因爲這是一個非常糟糕的方式來做事。

+0

同意,做不好的事情。但是,您的答案是OP所要求的:/。這種方式在服務器上非常沉重,因爲你必須返回所有結果,然後處理每一個服務器端的數據。 – Ben

+0

是的答案工作,我只是想知道什麼是最好的方法來做到這一點,因爲每個人都說數據庫設計不好 – Mathew

+0

並不意味着聽起來敵對 - 實際上你的數據庫設計可能沒問題。我的意思是簡單的數據操作(如排序或查找唯一值)通常在SQL中更好。但要保持好奇心:) – Ben

3

如果你想只使用一個SQL查詢,你可以說

SELECT DISTINCT type1 FROM products ORDER BY type1 

另一種方法是

SELECT type1, max(1) FROM products GROUP BY type1 

的缺點是,你必須做的19個查詢,如果你想獲得不同所有列的值。

好處是,如果你想爲一列提供不同的值,那就容易多了。

你能批19個查詢到for循環,也許:

for($i=1;$i<20;$i++) { 
    $sql = "SELECT DISTINCT type".$i." FROM products ORDER BY type1"; 
    // Run the sql query to get the data, then manipulate it as you wish. 
} 
0

使用UNION將19個查詢的結果作爲子查詢連接。

SELECT DISTINCT a FROM (
    SELECT DISTINCT type1 AS a FROM products 
    UNION 
    SELECT DISTINCT type2 AS a FROM products 
    UNION 
    ... 
    SELECT DISTINCT type19 AS a FROM products 
) ORDER BY a