选择外观

时间:2019-06-07 18:24:01

标签: php mysql sql

我有这样的代码,可以像这样从API获取数据

[
    {
        "service": 1,
        "name": "Followers",
        "type": "Default",
        "category": "First Category",
        "rate": "0.90",
        "min": "50",
        "max": "10000"
    },
    {
        "service": 2,
        "name": "Comments",
        "type": "Custom Comments",
        "category": "Second Category",
        "rate": "8",
        "min": "10",
        "max": "1500"
    }
]

然后将类别插入列名称为title的数据库表类别中。

然后将服务插入服务表中,但是在此之前,它会检查服务的类别名称是否看起来像插入数据库中以类别ID标记服务的任何类别。

// Get categories
$category = array_column($services, "rate", "category");

// Foreach and Insert each one to the database
foreach($category as $key => $value){
    $data = array('title' => $key,'status' => 1, 'server' => $server_id);
    $this->db->insert('categories', $data);
}

// Add services
foreach($services as $item){
    $catData = $this->Setting->get_data('*', 'categories', 'WHERE title LIKE "'.$item['category'].'%"');

    if($catData){
        $catID = $catData->id;
    }else{
        $catID = 0;
    }
    $data = array(
        'title' => $item['name'],
        'description' => "",
        'category' => $catID,
        'price' => $item['rate'],
        'min' => $item['min'],
        'max' => $item['max'],
        'status' => 1,
        'server' => $server_id,
        'service_id' => $item['service']
    );

    $this->db->insert('services', $data);

}

我有一个小问题,我不能在标题中使用operator =,因为API提供程序在诸如?这样的类别标题中放置了一些特殊字符,因此标​​题为♛PROMOTION(Cheap Services)?的类别将是♛PROMOTION(廉价服务)并存储在没有without

的数据库中

因此,如果我使用了运算符=它将失败,因此我想使用Like运算符,但又遇到了另一个问题,来自API的标题包含?,而存储的标题不是

如何使其选择标题看起来像的类别?

1 个答案:

答案 0 :(得分:1)

如果来自API的类别具有比数据库中的类别更多的字符,则可以反过来表示数据库中的类别是否是API字符串的一部分。...

$catData = $this->Setting->get_data('*', 'categories', 
        'WHERE "'.$item['category'].'" LIKE  CONCAT("%",title,"%")');