【发布时间】:2018-04-30 10:50:53
【问题描述】:
我需要一些帮助。
目前我的 mariadb 设置为一列作为 json 数组。
我想从用户输入中搜索数组,然后将其与存储在数据库中的用户的名字和姓氏结合起来。
在数据库中:
列:名字、姓氏和郊区_i_cover(包含json数组)
例如:[“比勒陀利亚”、“开普敦”、“花园大道”]
我想要一个 sql 语句,它会搜索郊区_i_cover 并允许我组合名字和姓氏。
到目前为止,我有这个:
<?php
//echo JUri::getInstance();
if (isset($_GET['category'])) {
$catetogry = $_GET['category'];
$name = $_GET['name'];
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query = ("SELECT * FROM #__jsn_users"); //not sure what goes here
$db->setQuery($query);
$results = $db->loadObjectList();
foreach($results as $obj) {
$value = json_decode($obj->suburbs_i_cover);
$value = array_filter($value, 'strlen'); //removes null values
but leaves "0"
$value = array_filter($value); //removes all null
values
if (!empty($value)) {
$value2 = $obj->firstname;
$value3 = $obj->lastname;
echo $value2 . ' '. $value3;
//echo "<br>";
// echo sizeof($value);
echo "<br>";
if (is_array($value)) {
foreach ($value as $sub_value) {
echo $sub_value;
echo "<br>";
}
}
echo "<br>";
echo "<hr>";
}
}
}
【问题讨论】:
-
在数据库中存储 JSON(或其他数据格式)通常表明您的数据模型不是很好。数据未标准化,这意味着像这样的操作和索引操作既困难又昂贵。
-
@Utkanos 不幸的是,我必须使用当前设置。 :(
-
您使用的是什么版本的 MySQL。我问 MySQL 5.7+ 有 JSON 数据类型。您使用的是 JSON 数据类型吗?
-
“这意味着像这样的操作和索引,既困难又昂贵。” @Utkanos PostgreSQL 等一些数据库允许对直接 JSON 数据 (JSONB) 进行良好和快速的索引。 MySQL 还允许在 JSON 上建立索引,但在生成的列上与普通索引一样快。JSON (NoSQL) 将在数据库中得到适当的开发,考虑 MySQL 8.0,它是一个 SQL 和 NoSQL 数据库。