2012-03-29 10 views
0

mysqlに問題があります。私は、次のデータを持つテーブルからレコードの特定のセットを取得する必要があります。mysqlのテーブルから一意のレコードを取得する

enter image description here

私はあなたにテーブルについての連中をブリーフィングしてみましょう。すべての主要項目には類似項目があり、類似項目にはサイズがあります。

ただし、最小サイズの上記表からユニークなアイテムを表示する必要があります。

例えば、プライマリアイテムはAであり、それはXの対応するアイテムであり、Xもプライマリであり、Aの類似アイテムですが、Xも同様のアイテムPを持ちます。したがって、A、X、Pはすべて類似しています。最小サイズのアイテムはサイズが4のPですので、クエリからテーブルからPを取得しています。

さらに、レコードは1-Mであり、すべてのプライマリアイテムが類似アイテムであり、すべての類似アイテムがデータベースのプライマリフィールドに存在します。このテーブルには、一度に1つのレコードをフェッチしてループするほぼ3つのlacsレコードが含まれています。

助けてください。

おかげ 有顎Shamshedi

+0

を助けるかもしれないPも同様の項目がある - Qを、そのサイズは8であるべきことは、それは正しいですか? – Devart

+0

テーブルスキーマを表示できますか? – sakhunzai

+0

@Devart - はいPは同様のアイテムQを持っているので、QでQを取得する必要があります。これはdbで1つしかないためです。 –

答えて

1

は、スキーマを考える:

CREATE TABLE similar_test (id int(11) NOT NULL DEFAULT '0', 
Stock varchar(20) NOT NULL, SimilarStock varchar(20) NOT NULL, 
ItemSize decimal(18,2) DEFAULT '0.00') ENGINE=InnoDB DEFAULT CHARSET=latin1; 

これをチェックしてください:私は1つのレベルの深さのために検討しています:

select * , s.ItemSize as minSize from similar_test as p 
join similar_test a s on s.Stock= p.SimilarStock 
where p.Sock='A' 
order by s.itemSize 
limit 1 

それはあなたの質問に対処していない場合あなたはコメントで、他のオプションは以下の通りです:

a。 PREを保持する別のテーブルを作成する - 計算された値が望まれる。

b。 Nが指定されていない場合、Nレベルまでアイテムリストを通過するストアドプロシージャを作成します。この場合、疑問のように

cです。並べ替えを行うと、PHP /またはあなたが

これを使用している他の言語にグループ化することはまた、あなたのhierarchical data
よろしく

+0

@ sakhunzai-それはAのためにうまく動作しますが、一般的にテーブル全体でこのクエリを実行する必要があります。どのアイテムがいくつのアイテムに似ているのか、どの深さまで似ているのか分かりません。と時間 –

+0

チェック私は私の応答を更新して、あなたは歓迎です:) – sakhunzai

関連する問題