1

私はデータベース構造を持っています。問題は、テーブルが非常に複雑であることです (typo3)。

私はこれに単純化します:

|     ID   |CAT  | 
|==========|=====|
|1         |44,15|
|2         |16   |
|3         |29,30|

結果として欲しいのは、CATEGORY(CAT)ごとに1行です。つまり、

1 44
1 15
2 16
3 29
3 30

単純な選択を使用しようとしましたが、もちろん機能しません。

また、テーブルCATEGORYで左結合を使用しようとしましたCATEGORY.id IN (TABLE1.cat)

4

2 に答える 2

0

1.: DB 構造が悪い! 列に文字列表現として配列があるため、第 1 正規形 (1NF) でさえありません。

2.:それほど難しいことではありません。

いくつかのインスピレーション: http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/またはここ: http://dev.mysql.com/doc/refman/5.5/en/string- functions.html#function_substring-index

于 2013-03-01T16:50:55.030 に答える
0

cat に 2 つの値しかない場合:

select id, left(cat, locate(',', cat) - 1)
from t
where cat like '%,%'
union all
select id, substr(cat, locate(',', cat) + 1, length(cat))
from t
where cat like '%,%'
union all
select id, cat
from t
where cat not like '%,%'

カテゴリのリストがある場合は、次のことができます。

select t.id, c.cat
from t join
     categories c
     on concat(',', c.cat, ',') like concat('%,', t.cat, ',%')
于 2013-03-01T16:51:53.493 に答える