如何从JSON数组中计算值

问题描述 投票:-1回答:2

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

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);
php mysql codeigniter
2个回答
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语法,以便获得标题的名称,类型的描述或您需要的任何其他内容。


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();

希望这个解决方案能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.