我的数据库中有以下数据。
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);
您的数据就是所谓的“多对多”关系。你有一个标题列表和一个类型列表,你需要知道它们之间的关系。虽然你的设计非常快,可以回答“什么类型适用于标题'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
语法,以便获得标题的名称,类型的描述或您需要的任何其他内容。
而不是使用这种格式在数据库中保存记录。
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();
希望这个解决方案能帮到你。