2017-07-22 7 views
-2

例を作成するMySQLで一部のデータは、私は、データベースで、データベースを持っているテーブルnameを持ってはユニークです:ループビュー

|======|========| 
| Name | Action | 
|======|========| 
| Jhon | 2 | 
| Steve| 1 | 
|======|========| 

私は、MySQLでVIEWを作成したいと私はこのようなVIEWをしたい:

ロジックは
|======|===========| 
| Name | In Cation | 
|======|===========| 
| Jhon | 1 - 2 | 
| Jhon | 2 - 2 | 
| Steve| 1 - 1 | 
|======|===========| 

、JHONはJHONアクション列の2 を有するため、実表1-2及び2-2を有し、スティーブがあるため実際のテーブルにのみ1-1を有する、スティーブ は1つだけを持っていますアクションコルンでは、私はそうだと思います ループを使用するので、Jhonが6つのアクションを持っている場合、Jhonが1-6,2-6、3-6 ... 6-6を持つよりも可能です。

どうすればよいですか?

+0

@Pang、それは、あなたがこれを助けることができますか? –

+0

@Pangを尊敬してくれてありがとう、そのこと...あなたはそれをすることができますか? :) –

+0

@pang、YES !,その右 –

答えて

1

私はあなたが1から多くの行を生成しようとしていると思います。ここで私はそうするためにヘルパーテーブル(日付)を使用しています。右外部結合の使用を注意してください。

MariaDB [sandbox]> create table t (name varchar(3),action int); 
Query OK, 0 rows affected (0.28 sec) 

MariaDB [sandbox]> insert into t values ('aaa',2),('bbb',1),('ccc',6); 
Query OK, 3 rows affected (0.01 sec) 
Records: 3 Duplicates: 0 Warnings: 0 

MariaDB [sandbox]> 
MariaDB [sandbox]> select d.id from dates d limit 10; 
+------+ 
| id | 
+------+ 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
| 6 | 
| 7 | 
| 8 | 
| 9 | 
| 10 | 
+------+ 
10 rows in set (0.00 sec) 

MariaDB [sandbox]> 
MariaDB [sandbox]> drop view if exists v1; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [sandbox]> create view v1 (name , action) as 
    -> select t.name tname,concat(d.id ,' - ', t.action) taction 
    -> from t 
    -> right outer join dates d on d.id <= t.action 
    -> where t.name is not null 
    -> order by t.name,d.id; 
Query OK, 0 rows affected (0.02 sec) 

MariaDB [sandbox]> 
MariaDB [sandbox]> select * from v1; 
+------+--------+ 
| name | action | 
+------+--------+ 
| aaa | 1 - 2 | 
| aaa | 2 - 2 | 
| bbb | 1 - 1 | 
| ccc | 1 - 6 | 
| ccc | 2 - 6 | 
| ccc | 3 - 6 | 
| ccc | 4 - 6 | 
| ccc | 5 - 6 | 
| ccc | 6 - 6 | 
+------+--------+ 
9 rows in set (0.01 sec)