如何在mySQL中处理多个字段,如电话号码

时间:2017-07-28 11:25:53

标签: php mysql database mysqli

我认为这是一个经典的SQL问题,但我无法在互联网上找到任何提示。

我的数据库表是:

Table User:
ID  UserName Adress
1   Uwe      No 1
2   user2    No 2
3   name3    No 3


Table Tel:
ID  telNumber user_id
1   123       1
2   234       1
3   123       2
4   567       1
5   900       3
6   800       3
7   111       1

使用此选项:

SELECT user.UserName, tel.telNumber, user.Adress
FROM [user] INNER JOIN tel ON user.ID = tel.user_id;

我会得到:

UserName  Tel       Adress
---------------------------
Uwe       123       No 1      
Uwe       234       No 1      
user2     123       No 2      
Uwe       567       No 1      
name3     900       No 3      
name3     800       No 3      
Uwe       111       No 1      
----------------------------

我现在正在寻找的是这样的事情:

Name: Uwe
Tel1: 123
Tel2: 234
Tel3: 567
Tel4: 111
Adress: No 1


Name: name3
Tel1: 900
Tel2: 800
Adress: No 3

我怎样才能得到这个结果?我如何调整我的SQL语句,我可以通过PHP找到一种方便的方法来捕获它?

2 个答案:

答案 0 :(得分:2)

您可以使用group_concatgroup by来获取每个用户的电话号码。然后,您可以使用爆炸或其他功能来分割电话号码并迭代它们。例如:

SELECT u.UserName, group_concat(t.telNumber) as numbers, u.Adress
FROM user as u
INNER JOIN tel as t 
ON u.ID = t.user_id
group by u.ID

SQL演示:http://sqlfiddle.com/#!9/6dca9b/3

PHP实现类似于:

<?php
$numers = array('User1' => '1', 'User2' => '123,456');
foreach($numers as $user => $num){
    echo $user . PHP_EOL;
    if(strpos($num, ',') === FALSE) {
        echo 'Tel1:' . $num .PHP_EOL;
    } else {
        $nums = explode(',', $num);
        foreach($nums as $key => $temp){
            echo 'Tel' . ($key + 1) . ':' .  $temp .PHP_EOL;
        }
    }
}

演示:https://3v4l.org/OE3IA

答案 1 :(得分:1)

根据经验,不要将演示数据与逻辑混合。

您实际上需要 SQL查询以返回公共主题记录列表的序列号。这个细节最好留给应用层,即你的PHP代码。让你的PHP代码&#34;知道&#34;当它列出给定用户的电话号码时(这应该是微不足道的)并以你所示的列举方式呈现它们(伪代码):

for each user:
    i = 0
    for each 'user' phone number:
        i++
        show phone number (i)
    next
next

知道哪个电话处于哪个位置比知道你为用户准备好它们(通常)不那么重要。