将数据动态插入 MySQL 表


inserting data into a mysql table dynamically

请原谅我缺乏合适的问题标题,但我的问题如下

我有一个表格,其中包含如下所示的数据:

    mysql> select * from tablex;
+-------+---------+-----+
| id  | post_id   | pid |
+-------+---------+-----+
| 14549 |    7195 |  27 |
| 14551 |    7195 |  34 |
| 14556 |    7195 |   1 |
| 14564 |    7196 |  51 |
| 14566 |    7196 |  11 |
| 14571 |    7196 |  37 |
| 14576 |    7197 |  36 |
| 14578 |    7198 |  11 |
| 14586 |    7199 |  15 |
| 14612 |    7201 |  42 |
+-------+---------+-----+

当我对重复项进行计数时,我得到这样的数据结构:

mysql> select count(*), post_id from tablex group by post_id;
+----------+---------+
| count(*) | post_id |
+----------+---------+
|        3 |    7195 |
|        3 |    7196 |
|        1 |    7197 |
|        1 |    7198 |
|        1 |    7199 |
|        1 |    7201 |
+----------+---------+

我正在寻找如何使用 php/mysql 最好地操作上述数据的想法,以将表格更新为如下所示

mysql> select * from tabley order by meta_id desc;
+---------+---------+------------------+---------------+
| meta_id | post_id | meta_key         | meta_value    |
+---------+---------+------------------+---------------+
|    7575 |     7195| multiple         |       3       |
|    7574 |     7195| multiple_0       |      27       |
|    7573 |     7195| multiple_1       |      34       |
|    7572 |     7195| multiple_2       |      1        |
|         |         |                  |               |
+---------+---------+------------------+---------------+

您会注意到 post_id 7195 出现 3 次,因此第一步是将meta_key倍设置为 3。

下一步是运行循环并创建键 0-2 并创建元键 mutiple_0 - multiple_2并插入对应于 post_id 7195 的值 27,34,1,从表 x 中可以看出......实现此目的的最简单方法是什么?

这是代码。不要忘记更改服务器名称,用户名,密码和数据库

$conn = mysqli_connect('localhost', 'root', 'password','database');
  $sql=mysqli_query($conn,"select count(*) as count,post_id from tablex group by post_id");
    while($row=mysqli_fetch_array($sql)){   
        $count[]=$row["count"];
        $postid[]=$row["post_id"];
        }
        foreach (array_combine($postid,$count) as $pid=>$cnt){
            for($i=0;$i<=$cnt;$i++){
                $pstid = $pid;
                if($i==0){
                $multiple = "multiple";
                $meta= $cnt;
                }
                else{
                    $x=$i-1;
                    $multiple = "multiple_".$x;
                    $query=mysqli_query($conn,"select pid from tablex where post_id='$pid'");
                    while($row=mysqli_fetch_array($query)){ 
                    $id[]=$row["pid"];
                    }
                    $meta = $id[$i-1];
                }
$query2=mysqli_query($conn,"INSERT INTO tabley(post_id,meta_key,meta_value) VALUES('$pid','$multiple','$meta')");
            }
        }

此操作只能使用 mysql

INSERT INTO tabley (
    post_id,
    meta_key,
    meta_value
) SELECT 
    t1.post_id,
    'multiple' AS multiple,
    COUNT(*)
FROM tablex AS t1 GROUP BY t1.post_id
UNION
SELECT
    t2.post_id,
    REPLACE(
        CONCAT(
            'multiple_',
            @curRow:=CASE
                WHEN @postId = t2.post_id THEN @curRow + 1
                ELSE 0
            END,
            @postId:=t2.post_id
        ),
        t2.post_id,
        ''
    ) AS multiple,
    t2.pid
FROM tablex AS t2
ORDER BY post_id, multiple;

第一部分是INSERT ... SELECT mysql语法。UNION第二个选择。您可以在没有INSERT的情况下测试SELECT

第二部分是获取具有相似post_id的行的行号。