2015-10-18 32 views
1

多个值我有这样读取来自一列的MySQL

+----------------------------+ 
|PhoneNumber     | 
+----------------------------+ 
|0378617186#0381716116#  | 
+----------------------------+ 

MySQL数据库柱所以想提取单个值转换成不同的值..通过hash (#)分离的每个电话号码的值。

我把它用于我的PHP登录功能的需要..有些人的电话号码超过1,所以根据我的问题...该人可以使用第一个号码(0378617186)或第二个号码( 0381716116),所以我需要PHP执行hash (#)符号为OR函数。

任何种类的乌尔帮助将是有益的,我... 感谢

+2

这是可怕的数据库设计,所以如果你控制了数据库模式,真正的答案是不存储多值每列。如果您不控制架构,请首先严惩无论如何:-),然后使用像$ numbers = explode('#',$ column)之类的东西并遍历结果数组。 – blm

+0

看起来你刚刚开始研究这个项目,所以改变事情应该比以后更容易,更好。 如果可能,尝试将模式更改为如下形式:'[userID] [phoneNumber] [user1] [123456] [user1] [345566] [user2] [5677] ...'。 – ahmed

+0

您是否认为通过sql语句判断电话号码是否是用户注册的电话号码之一? –

回答

1

如果你真的执行,以保持这个数据库模式,那么你可以使用下面的查询******中国列转换为多达10行(您可以相应地调整它,也改变T1表名表名您目前使用):

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t1.PhoneNumber, '#', numbers.n), '#', -1) name 
FROM (
    SELECT 1 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 10 
) numbers 
INNER JOIN t1 
ON CHAR_LENGTH(t1.PhoneNumber) - CHAR_LENGTH(REPLACE(t1.PhoneNumber, '#', '')) >= numbers.n - 1 
ORDER BY PhoneNumber, n; 
+0

perfecto !!这就是我所需要的..谢谢你我的朋友:D – Cruelife

+0

不客气!我很高兴我帮助您。 –