【发布时间】:2015-10-26 10:05:50
【问题描述】:
我有四个表,如下所示
列表:
------------------------------------------------------------------------------------------------
| list_id |user_id | name | category | fees | details |created_on |
------------------------------------------------------------------------------------------------
| 90cc57a4-f782-4c57-ac98-1965c57ece57 |user 100 |satwik| music | 500 | dummy |2015-08-02 |
------------------------------------------------------------------------------------------------
将我的 list_id 从随机字符串更改为 UUID。
from this comment on php.net
see this stackoverflow question
在列表表中 list_id 是主键,我知道使用自动增量是最好的,但我的要求是这样的。 s.no 是其余表的主键。
我需要从 PHP 端生成一个随机密钥,因为在会话中设置 list_id 并避免另一个查询在会话中设置 list_id。 喜欢:
----------------------------------------------------------------
|.sno | list_id | user_id | likes |
----------------------------------------------------------------
| 1 | 90cc57a4-f782-4c57-ac98-1965c57ece57 | user110 | 1 |
----------------------------------------------------------------
| 2 | 90cc57a4-f782-4c57-ac98-1965c57ece57 | user215 | 1 |
----------------------------------------------------------------
| 3 | 90cc57a4-f782-4c57-ac98-1965c57ece57 | user200 | 1 |
----------------------------------------------------------------
cmets:
-------------------------------------------------------------------------
|.sno | user_id | list_id | comment |
-------------------------------------------------------------------------
| 1 | user 205| 90cc57a4-f782-4c57-ac98-1965c57ece57 | dummy comment |
-------------------------------------------------------------------------
浏览量:
----------------------------------------------------------------
|.sno | list_id | user_id | views |
----------------------------------------------------------------
| 1 | 90cc57a4-f782-4c57-ac98-1965c57ece57 | user110 | 2 |
----------------------------------------------------------------
| 2 | 90cc57a4-f782-4c57-ac98-1965c57ece57 | user215 | 1 |
----------------------------------------------------------------
| 3 | 90cc57a4-f782-4c57-ac98-1965c57ece57 | user200 | 1 |
----------------------------------------------------------------
我正在尝试从列表表中获取用户 ID user100 的列表
并且需要从我拥有的各种表中获取用户列表 ID 的视图计数,例如 cmets。
我尝试使用来自 codeigniter 的查询
$this->db->select ( 'list.*,count(v.views) as views,count(l.likes) as likes,count(c.comment) as comments' )
->from ( 'listings as list' )
->join ( 'views v', 'v.list_id = list.list_id')
->join ( 'likes l', 'l.list_id = list.list_id')
->join ( 'comments c', 'c.list_id = list.list_id');
$this->db->where ( 'list.user_id', $user_id);
$query = $this->db->get ();
我得到了错误的观点和点赞数。
这个数据库设计好还是我需要改变任何东西。我对使用联接的认识较少,请帮助我。
编辑:
我从下面的答案中尝试了这个查询
$this->db->select ( 'l.*,count(distinct v.s_no) as views,count(distinct li.s_no) as likes,count(distinct c.s_no) as comments' ,false)
->from ( 'listings as l' )
->join ( 'likes li', 'l.list_id = li.list_id')
->join ( 'comments c', 'l.list_id = c.list_id')
->join ( 'views v', 'l.list_id = v.list_id')
->where ( 'l.user_id', $id);
我得到了我想要的,但是如果我没有任何 cmets 或视图或喜欢,这种查询方式会失败(返回 null)。
【问题讨论】:
-
给出这些表的主键和关系。
-
我没有维护任何关系,只是试图加入 list_id 上的表
-
你好,downvoter,我希望得到最少的解释或我做错了什么
标签: php mysql database codeigniter join