SQL在两个表上加入Codeigniter?

时间:2013-01-01 12:15:41

标签: mysql sql codeigniter join

我正在构建网址缩短/重定向服务,我对如何最好地从两个表中获取数据感到困惑。

我有两张桌子:

重定向

id
datetime
ip_address
browser_agent
url_string

链接

id
alias
url
created
user_id

链接 存储链接详细信息,每次重定向时,都会将其记录在 重定向 表中每个重定向都有一行。

链接 中的

alias 重定向 中的url_string是相同的。例如Dw4所以该域名为example.com/Dw4 - 重定向到 链接 中的url字段。

我想要实现的是从 重定向 表中选择(并计算)所有重定向,其中url_string与{{1}相同然后alias与登录用户相同。

我正在使用Codeigniter。

到目前为止,我正在尝试这样的事情:

user_id

但我没有运气。

3 个答案:

答案 0 :(得分:1)

JOIN两个表如下:

SELECT 
  r.*
FROM redirects r
INNER JOIN links l ON r.url_string = l.alias;

更新:试试这个:

SELECT 
  l.*,
  r.browser_agent,
  rCounts.redirectsCount
FROM links l
INNER JOIN redirects r ON r.url_string = l.alias
INNER JOIN
(
   SELECT url_string, COUNT(*) redirectsCount
   FROM redirects 
   GROUP BY url_string
) rCounts ON rrCounts.url_string = l.alias;

答案 1 :(得分:1)

您可以将join用作:

$this->db->select('*');
    $this->db->from('links');
    $this->db->join('redirects', 'redirects.url_string = links.alias');
    $query = $this->db->get();

    return $query->result;

并在视图中使用foreach语法将db-contents显示为您的要求。

答案 2 :(得分:0)

正如您所说,对于已登录用户,user_id应该相同,您应该使用join with user_id也可以获取特定的user_id详细信息,因此您的查询应该是:

SELECT redirects.id,count(*) FROM redirects inner join links 
on redirects.url_string=links.alias
and redirects.id=links.user_id
group by redirects.id