我有一些像这样的行:
school 4
hotel 2
restaurant 6
我想这样输出:
school 1
school 2
school 3
school 4
hotel 1
hotel 2
restaurant 1
...
restaurant 6
我是否可以运行MySQL查询来输出它(即输出的行数对应于第二个字段中的数字)?
答案 0 :(得分:1)
感谢JB Nizet告诉我,MySQL无法轻易地在它自己的基础上做到这一点。它鼓舞了我编写这个PHP脚本:
$result = mysqli_query($dbc,"select abbrev,chapters from books");
while ($output = mysqli_fetch_array($result,MYSQL_ASSOC)) {
for ($i=1; $i<=$output['chapters']; $i++) {
echo "{$output['abbrev']}$i\n";
}
}
答案 1 :(得分:1)
在Oracle或PostgreSQL中,使用行生成器可以相对简单地解决这种问题。不幸的是,MySQL没有任何简单的生成行的方法,你必须手动完成。你必须创建一个视图。
create or replace view generator_16 as
select 0 n union all select 1 union all select 2 union all
select 3 union all select 4 union all select 5 union all
select 6 union all select 7 union all select 8 union all
select 9 union all select 10 union all select 11 union all
select 12 union all select 13 union all select 14 union all
select 15;
此视图有一列n
和0
到15
的16行。使用此视图,您可以编写如下查询:
select a.name, b.n
from t a, generator_16 b
where b.n <= a.n and b.n > 0;
由于视图行从0
开始,因此需要额外的过滤条件b.n > 0
来排除0
。如果您定义一个从1
开始的视图,则不需要附加条件。
我认为这个数字很小(低于16
)。如果你必须处理超过15的数字的情况,那么你应该定义另一个包含256行的视图:
create or replace view generator_256 as
select (hi.n*16 + lo.n) as n
from generator_16 hi, generator_16 lo;
然后更新查询以使用generator_256
。
有关generator_16
,generator_256
观看次数的详细说明,阅读MySQL Row Generator会对您有所帮助。