如何从JSON数组计算值

时间:2019-03-28 19:21:31

标签: php mysql codeigniter

我的数据库中有以下数据。

id     title               genre_id
1      Khiladi               ["5"]
2      Sanam              ["2","5","20"]
3      Raaz                 ["10"]

现在我要计算匹配的genre_id,例如5 = 2、10 = 1 我得到的结果正常值不是JSON。

假设$genre_id =5;然后跟随我得到1,但期望结果为2

$this->db->where('genre_id' , $genre_id);

2 个答案:

答案 0 :(得分:0)

使用这种在数据库中保存记录的格式开始。

id     title               genre_id
1      Khiladi               ["5"]
2      Sanam              ["2","5","20"]
3      Raaz                 ["10"]

您可以在一个列中使用单个原子值,该列是数据的规范化形式。像这样,这是非常简单的方法。如果需要,还可以将multiple tables与多对多关系一起使用。

id     title               genre_id
1      khiladi              5
2      sanam                2
3      sanam                5
4      sanam                20
5      raaz                 10

然后,您可以根据需要查询。就像您想从count 5列中genre_id开始。现在,您可以使用此查询,您将获得所需的结果。

$this->db->where('genre_id', $genre_id);
$this->db->from("table_name");
echo $this->db->count_all_results();

希望此解决方案对您有所帮助。

答案 1 :(得分:0)

您的数据就是所谓的“多对多”关系。您有一个标题列表和一个体裁列表,您需要知道它们之间的关系。尽管您的设计可以非常迅速地回答“标题为“ Sanam”的流派有哪些类型?”的问题。要回答另一个问题非常困难:类别5中有哪些标题?正如您已经发现的那样。

通常在关系数据库(如MySQL)中,使用三个表表示多对多关系。我会在这里给您做一个非常简短的介绍,但是如果您搜索“ MySQL多对多”,您会发现很多信息,其中一些信息是为初学者编写的。

您的表可能类似于:

#Table Titles
id  |  title
--------------
1   | Khiladi
2   | Sanam
3   | Raaz

可能还有其他有关标题的信息(可能是描述),但可能没有适用于其他标题的信息(例如体裁或导演)。

对于类型,您将有一个类似的表格:

#Table Genres
id  |  title
--------------
1   | Action
2   | Comedy
3   | Romance

那么您如何知道哪些类型与哪些标题搭配?您创建第三个表,作为每个RELATIONSHIP的行。

#Table Title_has_Genre
title_id  | genre_id
----------------------
1         | 5
2         | 2
2         | 5
2         | 10

等等。

现在,您可以轻松获取类型5的所有标题的ID,还可以获取与标题相关的所有类型的ID。

通常,您将在查询中使用JOIN语法,以便获得标题的名称,流派的描述或其他所需的内容。