3

テーブルからすべての製品オプションの組み合わせを取得しようとして過去 5 時間を費やしましたが、今は完全に立ち往生しています。(簡略化された)次のようなデータを含むテーブルがあります。

CREATE TABLE `assigned_options` (
  `option_id` int(10) unsigned NOT NULL DEFAULT '0',
  `value_id` int(10) unsigned NOT NULL DEFAULT '0',
);

INSERT INTO `assigned_options` (`value_id`, `option_id`) VALUES
(4, 2),
(3, 2),
(2, 1),
(1, 1),
(5, 3),
(6, 3),
(7, 3);

オプション ID 2 は、赤 (4) と青 (3) のバリエーションを持つ色、オプション ID 1 サイズなど....

1 つの MySQL クエリでこれを行うことは可能ですか? PHP を使用して繰り返し関数を作成し、すべての可能性を取得しようとしましたが、機能させることができません。

どんなヒントでも大歓迎です。:)

4

3 に答える 3

1

あなたのテーブルを考えると...値とオプションの可能なすべての組み合わせが必要だと思います。これはクロス結合です (結果を制限する ON または where 句のない結合):

 SELECT a.value_id, b.option_id 
     FROM assigned_options a 
     JOIN assigned_options b 
     GROUP BY a.value_id, b.option_id 

group by は、重複する結果を除外します。

他に 2 つのテーブルがvalueありoption、すべての組み合わせをプルしたいですか?

于 2012-10-18T18:21:41.963 に答える
1
select option_id, value_id
from assigned_options
group by option_id, value_id
order by option_id, value_id
于 2012-10-18T18:28:08.683 に答える
0

TSQL では、再帰的な CTE を使用できます。どこで入手したか覚えていませんが、かなり便利です。注 MYSQL は「With」オプションを使用しないため、MySQL では機能しません

WITH Numbers(N) AS (
                    SELECT N
                    FROM ( VALUES(1), (2), (3), (4), (5), (6)) Numbers(N)),
                        Recur(N,Combination) AS (
                        SELECT N, CAST(N AS VARCHAR(20)) 
                        FROM Numbers


UNION ALL

SELECT n.N,CAST(r.Combination + ',' + CAST(n.N AS VARCHAR(10)) AS VARCHAR(20)) 
FROM Recur r
INNER JOIN Numbers n ON n.N > r.N)



select Combination
from RECUR
ORDER BY LEN(Combination),Combination;
于 2015-09-22T13:41:04.330 に答える