2011-07-20 16 views
1

フィールドtype1,type2type3type4までのすべてのデータベースと他のフィールドとがあります。私がしようとしているのは、それらの行からすべてのフィールドを取得し、重複していないフィールドだけをエコーすることです。PHP/MYSQLクエリの一意/固有値

私はselect distinct type1, type2 etc from productsを使用して試してみましたが、単一の変数にすべてのフィールド($_row['type1']$_row['type2']など)を入れて、その変数からすべての個別の値をエコーするためにPHPコードを知りません。誰にも何か提案はありますか?

答えて

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個のクエリをしなければならないということですすべての列の値。

1つの列に異なる値が必要な場合は、ずっと簡単です。

あなたは可能性があり、おそらくforループ、へのバッチ19個のクエリを:あなたの結果を通じて

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