Mysql将列拆分为3列,以便在phpMyAdmin中查看
我对编写SQL查询非常陌生——我希望在前端应用程序中创建一些图表,但必须操作数据来创建视图,因为前端不太适合运行复杂的查询 以下是我目前的情况: 我有一个包含客户机数据和记录创建日期的表。这是一个没有特殊顺序的样品Mysql将列拆分为3列,以便在phpMyAdmin中查看,mysql,sql,split,phpmyadmin,Mysql,Sql,Split,Phpmyadmin,我对编写SQL查询非常陌生——我希望在前端应用程序中创建一些图表,但必须操作数据来创建视图,因为前端不太适合运行复杂的查询 以下是我目前的情况: 我有一个包含客户机数据和记录创建日期的表。这是一个没有特殊顺序的样品 | ID | post_date | post_title | ------------------------------------------- | 1654 | 2017-09-04 | Bill Smith (5678)| | 1658 |
| ID | post_date | post_title |
-------------------------------------------
| 1654 | 2017-09-04 | Bill Smith (5678)|
| 1658 | 2017-09-05 | Jan Jones (3423) |
| 1878 | 2017-08-17 | Jim Tanz (7890) |
| 1659 | 2017-09-06 | Jan Jones (3425) |
我想按姓氏显示唯一的值,但目前所有的名称都在一列中。ID是唯一的,因为它为每个记录递增,并且附加到姓氏的括号中的数字(事务ID)也是唯一的,并且来自我们从中提取名称的另一个应用程序
我已经能够将post_title列拆分为2列,但只剩下FName和LastName(TrID),这不允许我按姓氏选择不同的条目来进行客户端计数,因为TrID都是不同的
我的意图是创建一个包含3列的视图,然后按姓氏显示不同的条目,并统计每个月的客户数量,以查看是否有任何客户增长,但我仍处于非常早期的阶段
任何帮助都将不胜感激(并永远铭记:>)
谢谢 某些文本操作可能会起作用:
SELECT t.post_title
,LEFT(t.post_title, LOCATE(' ', post_title )) AS FName
,SUBSTR(t.post_title, LOCATE(' ', post_title)+1, LOCATE(' ',post_title,LOCATE(' ', post_title)+1)-LOCATE(' ', post_title)) AS LName
,REPLACE(REPLACE(TRIM(RIGHT(t.post_title,LOCATE(' ', REVERSE(post_title)))), '(', ''), ')','') AS ID
FROM (SELECT 'Bill Smith (5678)' AS post_title
UNION SELECT 'Jan Jones (3423)'
UNION SELECT 'Jim Tanz (7890)') t;
某些文本操作可能会起作用:
SELECT t.post_title
,LEFT(t.post_title, LOCATE(' ', post_title )) AS FName
,SUBSTR(t.post_title, LOCATE(' ', post_title)+1, LOCATE(' ',post_title,LOCATE(' ', post_title)+1)-LOCATE(' ', post_title)) AS LName
,REPLACE(REPLACE(TRIM(RIGHT(t.post_title,LOCATE(' ', REVERSE(post_title)))), '(', ''), ')','') AS ID
FROM (SELECT 'Bill Smith (5678)' AS post_title
UNION SELECT 'Jan Jones (3423)'
UNION SELECT 'Jim Tanz (7890)') t;
您可以使用
子字符串\u INDEX
分隔字符串,以便检索名字:
SUBSTRING_INDEX(post_title," ",1)
这会得到空间的第n个实例之前的所有内容,因此得到姓氏有点混乱,因为使用“2”时,我们会得到第二个空间之前的值,然后我们需要提取第二个值(-1,向后)。因此,获取“姓氏”是通过以下方式完成的:
SUBSTRING_INDEX(SUBSTRING_INDEX(post_title," ",2)," ",-1)
场景1:将post\u title
拆分为三个字段:
SELECT
SUBSTRING_INDEX(post_title," ",1) as firstName,
SUBSTRING_INDEX(SUBSTRING_INDEX(post_title," ",2)," ",-1) as lastName,
SUBSTRING_INDEX(REPLACE(REPLACE(post_title,"(",""),")","")," ",-1) as post_ID
FROM tableName;
输出:
+-----------+----------+---------+
| firstName | lastName | post_ID |
---------------------------------+
| Bill | Smith | 5678 |
| Jan | Jones | 3423 |
| Jim | Tanz | 7890 |
| Jan | Jones | 3425 |
+-----------+----------+---------+
+-----+----------+
| Qty | lastName |
+-----+----------+
| 2 | Jones |
| 1 | Smith |
| 1 | Tanz |
+-----+----------+
场景2:分组功能
您还可以使用命名字段按姓氏分组和计数
SELECT
COUNT(*) as Qty,
SUBSTRING_INDEX(SUBSTRING_INDEX(post_title," ",2)," ",-1) as lastName
FROM tableName
GROUP BY lastName;
输出:
+-----------+----------+---------+
| firstName | lastName | post_ID |
---------------------------------+
| Bill | Smith | 5678 |
| Jan | Jones | 3423 |
| Jim | Tanz | 7890 |
| Jan | Jones | 3425 |
+-----------+----------+---------+
+-----+----------+
| Qty | lastName |
+-----+----------+
| 2 | Jones |
| 1 | Smith |
| 1 | Tanz |
+-----+----------+
等等。很难进一步调整,因为我不完全确定您打算做什么,但希望上面的内容有用。您可以使用
子字符串\u INDEX
来分隔字符串,以便检索第一个名称:
SUBSTRING_INDEX(post_title," ",1)
这会得到空间的第n个实例之前的所有内容,因此得到姓氏有点混乱,因为使用“2”时,我们会得到第二个空间之前的值,然后我们需要提取第二个值(-1,向后)。因此,获取“姓氏”是通过以下方式完成的:
SUBSTRING_INDEX(SUBSTRING_INDEX(post_title," ",2)," ",-1)
场景1:将post\u title
拆分为三个字段:
SELECT
SUBSTRING_INDEX(post_title," ",1) as firstName,
SUBSTRING_INDEX(SUBSTRING_INDEX(post_title," ",2)," ",-1) as lastName,
SUBSTRING_INDEX(REPLACE(REPLACE(post_title,"(",""),")","")," ",-1) as post_ID
FROM tableName;
输出:
+-----------+----------+---------+
| firstName | lastName | post_ID |
---------------------------------+
| Bill | Smith | 5678 |
| Jan | Jones | 3423 |
| Jim | Tanz | 7890 |
| Jan | Jones | 3425 |
+-----------+----------+---------+
+-----+----------+
| Qty | lastName |
+-----+----------+
| 2 | Jones |
| 1 | Smith |
| 1 | Tanz |
+-----+----------+
场景2:分组功能
您还可以使用命名字段按姓氏分组和计数
SELECT
COUNT(*) as Qty,
SUBSTRING_INDEX(SUBSTRING_INDEX(post_title," ",2)," ",-1) as lastName
FROM tableName
GROUP BY lastName;
输出:
+-----------+----------+---------+
| firstName | lastName | post_ID |
---------------------------------+
| Bill | Smith | 5678 |
| Jan | Jones | 3423 |
| Jim | Tanz | 7890 |
| Jan | Jones | 3425 |
+-----------+----------+---------+
+-----+----------+
| Qty | lastName |
+-----+----------+
| 2 | Jones |
| 1 | Smith |
| 1 | Tanz |
+-----+----------+
等等。很难进一步调整,因为我不完全确定您打算做什么,但希望上面的内容有用。您能详细说明您想要显示什么吗?我不太清楚你是在寻找所有唯一的姓氏,只是显示每行的姓氏,或者按姓氏分组,或者只是将帖子标题分成三个字段(名字、姓氏、id)……或者其他什么!谢谢Chris-将文本分成3个单独的列,如firstName | lastName | post | u ID |你能详细说明你想显示什么吗?我不太清楚你是在寻找所有唯一的姓氏,只是显示每行的姓氏,或者按姓氏分组,或者只是将帖子标题分成三个字段(名字、姓氏、id)……或者其他什么!谢谢克里斯-这将是分裂成3个单独的栏目,如firstName | lastName | post|u ID |谢谢克里斯-这是伟大的,将真正有帮助!!谢谢克里斯-这太棒了,真的很有帮助!!