0

私のアプローチが適切かどうか、可能かどうか、どうすればよいか疑問に思っていましたか?

2 つの MySQL テーブルがあるとします。

表 A

ID   alias     
--   --
11   banner_a
26   banner_b

表 B

Column  Type
pid         int(10) 
lang    varchar(2)  
field   varchar(255)    
value   text    

表 B のデータ例:

id  lang    field               value

26  da      banner_type         single
26  da      priority            5
26  da      timing              5

26  de      banner_type         single
26  de      priority            1
26  de      timing              10

したがって、TABLE A からすべてまたは一部のレコードを選択し、それらの関連フィールドを、TABLE B の値で lang でグループ化して選択したいとします。テーブル B のフィールドは、MySQL の通常の列のように選択され、その値はフィールドの値になります。

次のような結果が期待されます。

結果レコード 1:

id 26
alias banner_b
lang da
banner_type single
priority 5
timing 5

結果レコード 2:

id 26
alias banner_b
lang de
banner_type single
priority 5
timing 5

私は数年前にそのようなことをしました。COALESCE の場合だと思いますが、それは私が望んでいるものではありません。

あるとすれば、どこから始めればよいですか?:-)

ありがとう

4

1 に答える 1

1

これを試して:

SELECT
  b.id, 
  b.lang,
  MAX(CASE WHEN b.field = 'banner_type' THEN b.value END) AS 'banner_type',
  MAX(CASE WHEN b.field = 'priority' THEN b.value END) AS 'priority',
  MAX(CASE WHEN b.field = 'timing' THEN b.value END) AS 'timing'
FROM TableA a
INNER JOIN TableB b ON a.ID = b.ID
GROUP BY b.id, b.lang;

SQL フィドルのデモ

これにより、次のことが得られます。

| ID | LANG | BANNER_TYPE | PRIORITY | TIMING |
-----------------------------------------------
| 26 |   da |      single |        5 |      5 |
| 26 |   de |      single |        1 |     10 |

注意してください:私が使用したクエリではMAXid langテーブル内の各グループには、それぞれTableBに 2 つの値があるため、各グループにBANNER_TYPE | PRIORITY | TIMINGどの値が必要ですか?

于 2013-01-15T13:42:17.013 に答える