2014-08-31 61 views
0

在MySQL数据库中,我有这些数据波纹管:Mysql的延伸的电话号码

id, phonenumber, location 
1, 111222, NY 
2, 222333, GB 
.... 

现在我将扩展PHONENUMBER字段(VARCHAR) 例如,如果我延伸一个多个号码, 那么预期的数据将是:

id, phonenumber, location 
1, 1112220, NY 
2, 1112221, NY 
3, 1112222, NY 
4, 1112223, NY 
5, 1112224, NY 
6, 1112225, NY 
7, 1112226, NY 
8, 1112227, NY 
9, 1112228, NY 
10, 1112229, NY 
11, 2223330, PH 
12, 2223331, PH 
... 

这是例如用于添加一个多个号码。 真实情况是我需要添加更多号码。 (加后缀从0000〜9999)

任何快速的方式来通过运行几个sql命令来做到这一点? 谢谢!

+0

能可能使用[此](http://stackoverflow.com/questions/6069024/syntax-of-for-loop-in-sql-server)。从来没有做过,所以不是100%确定。 – Sumurai8 2014-08-31 14:13:28

回答

0

为此,您可以加入,虽然这是一个有点MySQL中的痛苦。您需要延长的下列情况产生的价值是:

select concat(n1.n, n2.n, n3.n, n4.n) 
from (select 1 as n 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 0 
    ) n1 cross join 
    (select 1 as n 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 0 
    ) n2 cross join 
    (select 1 as n 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 0 
    ) n3 cross join 
    (select 1 as n 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 0 
    ) n4; 

可以结合起来,与使用cross join得到你想要的数据查询:

select id, concat(phonenumber, n1.n, n2.n, n3.n, n4.n) as phonenumber, location 
from yourtable t cross join 
    (select 1 as n 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 0 
     ) n1 cross join 
     (select 1 as n 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 0 
     ) n2 cross join 
     (select 1 as n 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 0 
     ) n3 cross join 
     (select 1 as n 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 0 
     ) n4; 

如果你想这些导致表,我建议你保存到另一个表使用:

create table as . . . 

查询前。

Here是一个SQL小提琴。

+0

有一个''''''''在你的第二个查询('''concat(phonenumber,n1.n,n2.n.n3.n,n4.n)'''')中''而不是'''',''会编辑它,但它不是6个字符,否则是一个非常好的答案。 – 2014-08-31 14:30:43

+0

运行此sql时仍然出现错误。但我认为它应该是一个小问题需要一个小的更正,我仍然试图... – Niuya 2014-08-31 14:37:04

+0

我发现结果表有这样的后缀“10111”,这将超出范围(0000〜9999)。 – Niuya 2014-08-31 15:05:43

0

您可以使用联合查询,并将它与你的表是保持2个电话号码

select *, concat(phonenumber,n) new_phonenumber from t 
cross join 
(select 0 as n 
union 
select 1 as n 
union 
select 2 as n 
union 
select 3 as n 
union 
select 4 as n 
union 
select 5 as n 
union 
select 6 as n 
union 
select 7 as n 
union 
select 8 as n 
union 
select 9 as n 

) t1 

order by phonenumber, n 

Sample demo

+0

谢谢,但这只适用于** 1 **更多号码。我不知道如何将这个SQL更改为** 4 **数字编号的情况。 – Niuya 2014-08-31 14:30:53

+0

@Niuya四个数字,你可以在这里使用Gordon's是工作[*'fiddle demo' *](http://sqlfiddle.com/#!2/e1069/8) – 2014-08-31 14:46:44

0
Please try this code 
<?php 
$con=mysql_connect("localhost","username","password"); 
$db=mysql_select_db("databasename"); 


$query="select * from table_name"; 
$result=mysql_query($query); 
while($re=mysql_fetch_array($result)) 
{ 
echo $re[1]; 
} 
?> 
+2

请为您的代码添加一些说明 - 为什么它会有帮助,它做了什么等等,以使其成为一个很好的答案。 – 2014-08-31 14:52:37

0
SELECT * FROM ints; 
+---+ 
| i | 
+---+ 
| 0 | 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
| 6 | 
| 7 | 
| 8 | 
| 9 | 
+---+ 

SELECT i4.i * 1000 + i3.i * 100 + i2.i*10 +i1.i j 
    FROM ints i1,ints i2, ints i3, ints i4 
ORDER 
    BY j DESC 
LIMIT 1; 
+------+ 
| j | 
+------+ 
| 9999 | 
+------+