繁体   English   中英

如何计算 JSON 数组中的值

[英]How to count value from JSON array

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

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

现在我想计算像 5 = 2, 10=1 这样的匹配流派 ID 我得到的结果是正常值而不是 JSON。

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

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

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

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

然后你可以随意查询。 就像你想从genre_id列中count 5 genre_id 现在你可以使用这个查询你会得到你想要的结果。

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

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

您的数据就是所谓的“多对多”关系。 您有一个标题列表和一个流派列表,您需要知道它们之间的关系。 尽管您的设计非常快速地回答了“哪些类型适用于标题'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语法,以便获得标题的名称、流派的描述或其他任何您需要的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM