当前位置: 首页 > 知识库问答 >
问题:

PHP SQL向mysql表中的特定记录添加单词

长孙章横
2023-03-14

我需要在表中的特定字段中添加两个不同的单词。

表是:

field1, field2 and field3

所以首先我需要选择我想要修改的记录:

SELECT * FROM MyTable where field3 = 1

假设结果是10条记录。

我现在有两个变量var1和var2

我现在需要将var1添加到表的field2的50%,将var2添加到其他50%

我该怎么做呢?

例子:

表:

  id | field2 | field3
-----------------------------
  1    hello      1
  2    hello2     1

第1条第2条

从mytable中选择*字段3=1

返回2个字段。。。

下一个

将String1插入到50%的结果中,并将String2插入字段2上的其他50%的结果中

输出应为:

  id | field2         |  field3
-----------------------------
  1    String1 hello      1
  2    String2 hello2     1

共有2个答案

尚河
2023-03-14

我不知道这是否适用于mysql,但我建议这样做(ms sql server语法):

update mytable
set field2 = case when ROW_NUMBER() over (order by id)%2 = 0
                  then 'var1' + field2
                  else 'var2' + field2
             end
where field3 = 1

或者,如果您不希望更新表,而只选择以下值:

select field1
     , case when ROW_NUMBER() over (order by 1d)%2 = 0
            then 'var1' + field2
            else 'var2' + field2
       end as field2
     , field3
 where field3 = 1

它将var1添加到偶数行,将var2添加到奇数行。用你的变量替换var1和var2。

它的工作原理是取每个行号的模2,从而查看结果集的行号是偶数还是奇数。然后根据行号是偶数还是奇数,输入var1或var2。

郗学
2023-03-14

获取更新的计数行。

select count(*) cnt 
from MyTable 
where field3 = 1;

并在php中将结果存储到变量$cnt中,同时计算范围之间的中间点。

$middle = ceil($cnt/2);

然后运行以下查询(当然不要忘记转义sql中传递的变量的值):

update MyTable a,
      (SELECT @rownum:=0) b
set field2 = concat(field2, if((@rownum := @rownum+1) > $middle, '$var1', '$var2'))     
where field3 = 1;

示例如下:

<?php

$conn = mysqli_connect('localhost', 'user', 'pass', 'dbtest');
$rs = mysqli_query($conn, "select count(*) cnt from MyTable where field3 = 1");
$row = mysqli_fetch_assoc($rs);
$cnt = $row['cnt'];
$middle = ceil($cnt/2);
$var1 = 'xxx';
$var2 = 'yyy';
mysqli_query(
    $conn, 
    "update MyTable a,
           (SELECT @rownum:=0) b
     set field2 = concat(field2, if((@rownum := @rownum+1) > $middle, '$var1', '$var2'))     
     where field3 = 1
    "
); 
 类似资料:
  • 我想在我的“订单”表中添加一个名为“付款类型”的列。 以下是我迄今为止的迁移: 我希望payment_type保持当前在数据库中的所有记录的值“正常”。然而,不是为了将来的记录。我希望未来的记录没有默认值。我该怎么做呢?

  • 我正在尝试添加一个自定义字段到忍者表单(第3.3节)。到处都找不到完整的例子。 仔细查看代码,似乎过滤器'ninja_forms_register_fields'可以起到作用,但我无法让它在任何地方运行。

  • 我在XML中指定log4j2 logger的文件名,如下所示。一切正常,但我得到了错误 2017-09-06 16:54:33,496主要错误未知的对象"RlandAccessFileAppender的类型org.apache.logging.log4j.core.appender.RlandAccessFileAppender被忽略:尝试嵌套它在其中之一:["Appender","Logger"

  • 问题内容: 我正在尝试创建一个使用MySQL表存储条目的简单消息系统(PHP)页面。我将在表中使用的列的粗略概述为: msg_id (主键,auto_increment) user_id (指向创建消息的用户的外键) 时间 (提供味精时间戳记的DATETIME条目) msg (包含味精的VARCHAR) 可访问的 (仅是一个int(1),0表示除用户本人可以读取msg之外没有其他人,而1则意味着其

  • 我正在尝试使用ajax发送表单数据。我的索引页面记录是在使用ajax从远程页面获取后显示的。 下面是我的页面图片。 每个记录都有注释框,我想使用ajax将这些注释存储在数据库中。 下面是我的jquery 我在单击时使用了,因为这些记录是从远程页面加载的。我的表格在下面 现在当我点击帖子时,评论正在为最后一条记录工作。我需要发送ID号和文本区值到PHP页面更新在mysql,但两个评论都显示相同的记录

  • 我正在使用entityMenager登录,并没事。