如何将由特殊字符分隔的字符串插入表中

时间:2016-11-29 07:10:22

标签: php mysql

我想INSERT到一张桌子。这张桌子很简单。

student_id      subject_id     student_name    student_report
      S001             M01           Albert                A+
      S001             M02           Albert                A
      S002             M04            Shana                B+

我有一个由特殊字符分隔的单个字符串的数据源。这样的事情。

  

S003 @@@ M02 @@@梅鲁@@@Ç@@@ S003 @@@ M03 @@@梅鲁@@@ S004 @@@ M01 @@@ Haschel @@@ d

如何将这种字符串插入表中? 任何答案或线索或参考非常感谢。提前谢谢

表格在插入后显示:

    student_id      subject_id     student_name    student_report
          S001             M01           Albert                A+
          S001             M02           Albert                A
          S002             M04            Shana                B+
          S003             M02             Meru                C
          S003             M02             Meru                NULL //no data here
          S004             M01          Haschel                D

3 个答案:

答案 0 :(得分:0)

您需要拆分此字符串。像这样使用explode函数:

  $data = explode('@@@',$stingValue,);

$data将拥有所有值。打开数据库连接,绑定编写查询,绑定参数并执行它。

答案 1 :(得分:0)

你可以使用这样的查询:

SELECT 
    REVERSE(SUBSTRING_INDEX(REVERSE(
    SUBSTRING_INDEX('S003@@@M02@@@Meru@@@C@@@S003@@@M03@@@Meru@@@S004@@@M01@@@Haschel@@@D','@@@',3)),'@@@',1));

要插入

INSERT INTO YOUR_TABLE
    SET
        student_id = REVERSE(SUBSTRING_INDEX(REVERSE(
         SUBSTRING_INDEX('S003@@@M02@@@Meru@@@C@@@S003@@@M03@@@Meru@@@S004@@@M01@@@Haschel@@@D','@@@',1)),'@@@',1)),
       subject_id = REVERSE(SUBSTRING_INDEX(REVERSE(
         SUBSTRING_INDEX('S003@@@M02@@@Meru@@@C@@@S003@@@M03@@@Meru@@@S004@@@M01@@@Haschel@@@D','@@@',2)),'@@@',1));

<强>样品

mysql> SELECT      REVERSE(SUBSTRING_INDEX(REVERSE(     SUBSTRING_INDEX('S003@@@M02@@@Meru@@@C@@@S003@@@M03@@@Meru@@@S004@@@M01@@@Haschel@@@D','@@@',1)),'@@@',1)) as reselt;
+--------+
| reselt |
+--------+
| S003   |
+--------+
1 row in set (0,00 sec)

mysql> SELECT      REVERSE(SUBSTRING_INDEX(REVERSE(     SUBSTRING_INDEX('S003@@@M02@@@Meru@@@C@@@S003@@@M03@@@Meru@@@S004@@@M01@@@Haschel@@@D','@@@',2)),'@@@',1)) as reselt;
+--------+
| reselt |
+--------+
| M02    |
+--------+
1 row in set (0,00 sec)

mysql> SELECT      REVERSE(SUBSTRING_INDEX(REVERSE(     SUBSTRING_INDEX('S003@@@M02@@@Meru@@@C@@@S003@@@M03@@@Meru@@@S004@@@M01@@@Haschel@@@D','@@@',3)),'@@@',1)) as reselt;
+--------+
| reselt |
+--------+
| Meru   |
+--------+
1 row in set (0,00 sec)

答案 2 :(得分:0)

  1. 如果您的String包含多行的值,则应添加行结束参数以表示新行的值而不是分隔符的开始。 例如:
  2. 使用S003 @@@ M02 @@@ Meru @@@ C $$$ S003 @@@ M03 @@@ Meru $$$ S004 @@@ M01 @@@ Haschel @@@ D

    代替S003 @@@ M02 @@@ Meru @@@ C @@@ S003 @@@ M03 @@@ Meru @@@ S004 @@@ M01 @@@ Haschel @@@ D

    1. 如果任何字段为空,那么应该有两次分隔符,它们之间没有任何值。
    2. e.g。

      使用S003 @@@ M03 @@@ Meru @@@@@@

      取代使用S003 @@@ M03 @@@ Meru @@@

      1. 添加文本分隔符的末尾以表示不再有记录。例如##
      2. 现在它很容易,循环每一行以获取具有每行数据库值的字符串,并在到达文本末尾时停止处理:

        解析器的逻辑有点像这样(不是php只是伪代码):

        while(character != <end-of-line-character>)
        {
            if( character != <new-line-character> )
            {
                string = string . character
            }
            else
            {
                value_to_insert_in_database = explode("@@@", string)
                perform_insertion_in_database with value_to_insert_in_database
                string = ""
            }
        }
        

        谢谢和问候