【问题标题】:Update json in database mysql更新数据库mysql中的json
【发布时间】:2011-11-29 08:09:12
【问题描述】:

我想在数据库中的两个表(table_foreigntable_submits)之间进行比较,如果数据库中的表table_submits 中的表table_foreign 中不存在某些数据,则删除表table_foreign 中的数据或更新。

$query_tfhi = $this->db->query("SELECT * FROM table_foreign ORDER BY id desc");
foreach ($query_tfhi->result() as $row) {
    $data_hi = json_decode($row->how_id, true);
    foreach ($data_hi as $hitf) {
        foreach ($hitf['howinto_id'] as $val_hitf) {
            //echo $val_hitf.'<br>';

            $query_delhi = $this->db->query("SELECT * FROM table_submits WHERE id LIKE '$val_hitf'");
            if ($query_delhi->num_rows() == 0) {
                //echo $val_hitf;
                $this->db->query("DELETE how_id = array('howinto_id'=>$val_hitf) FROM tour_foreign WHERE id LIKE '$row->id'");
            } else {
            }
        }
    }
}

我在how_id 列上的表table_foreign 中有(此数据存储(插入)与json_encode 在行数据库表的列上):

[{
    "howinto_id": ["14"]
},{
    "howinto_id": ["5"]
},{
    "howinto_id": ["4"]
}, {
    "howinto_id": ["3"]
}, {
    "howinto_id": ["2"]
}, {
    "howinto_id": ["1"]
}]

table_submitsid 上的表中:

1234

应该删除table_foreign14,5 中的两个表之间的比较。之后是这样的:

[{
    "howinto_id": ["4"]
}, {
    "howinto_id": ["3"]
}, {
    "howinto_id": ["2"]
}, {
    "howinto_id": ["1"]
}]

在 PHP 代码上面的输出中有错误:

发生数据库错误
错误号:1064

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 '('howinto_id'=>14) FROM tour_foreign WHERE id LIKE '1'' 在行附近 1

DELETE how_id = array('howinto_id'=>14) FROM table_foreign WHERE id 喜欢“1”

文件名:D:\xampp\htdocs\system\database\DB_driver.php

行号:330

如何解决?

【问题讨论】:

  • PHP 是 PHP,SQL 是 SQL。不要将两者混为一谈。
  • 这个比较(操作)我该怎么做?
  • 你为什么首先将 JSON 插入 MySQL?这是bad design
  • 您想与表中的 JSON 值的元素进行比较吗?这是不可能的,至少不是任何理智的方式。

标签: php mysql codeigniter json


【解决方案1】:

我认为你的问题应该这样解决:

  1. 首先,您需要从 json obj 中检索两个表的数据作为数组(无论如何),因为它返回数组
  2. 第二个你可以使用 array_diff($array1 , $array2) 它返回这些两个数组之间的差异数组
  3. 第三,您可以从差异数组中选择 Id ($ids)

    并使用

    $this-&gt;db-&gt;where_in("Id",$ids)-&gt;delete("table_submits")

像这样你已经从数据库中删除了两个表之间的差异,然后告诉我你是否可以这样做

【讨论】:

    猜你喜欢
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    相关资源
    最近更新 更多