【问题标题】:read multiple values from one column mysql从一列mysql读取多个值
【发布时间】:2016-01-17 00:20:08
【问题描述】:

我有一个这样的 Mysql 数据库列

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

所以我想将该单个值提取为不同的值。每个电话号码值由hash (#) 分隔。

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

您的任何帮助都会对我有所帮助... 谢谢

【问题讨论】:

  • 这是糟糕的数据库设计,所以如果您控制数据库架构,真正的答案是不要在每列存储多个值。如果您不控制架构,请先惩罚执行此操作的人 :-),然后使用 $numbers = explode('#', $column) 之类的方法并遍历生成的数组。
  • 看起来您刚刚开始处理该项目,因此更改内容应该很容易,最好现在就做。如果可能,请尝试将架构更改为:[userID][phoneNumber][user1][123456][user1][345566][user2][5677]...
  • 你的意思是通过sql语句判断一个电话号码是否是用户注册的电话号码之一?
  • 同意..这个数据库架构最糟糕..但我只是被告知要根据该架构来做:(

标签: php mysql string hash


【解决方案1】:

如果您真的被强制保留此数据库架构,那么您可以使用以下查询将 PhoneNumber 列转换为最多 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;

【讨论】:

  • 完美!!这就是我需要的......谢谢我的朋友:D
猜你喜欢
  • 2011-09-23
  • 2021-10-02
  • 2019-10-19
  • 2013-05-16
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多