首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL在两个表上加入Codeigniter?

SQL在两个表上加入Codeigniter?
EN

Stack Overflow用户
提问于 2013-01-01 12:15:41
回答 3查看 2.5K关注 0票数 4

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

我有两张这样的桌子:

重定向

代码语言:javascript
复制
id
datetime
ip_address
browser_agent
url_string

链接

代码语言:javascript
复制
id
alias
url
created
user_id

链接存储链接详细信息,每次重定向时,它都记录在重定向表中,作为每个重定向的一行。

alias in linksurl_string in 重定向是相同的。例如,Dw4,因此域将是example.com/Dw4 -重定向到links中的url字段。

我试图实现的是从重定向表中选择(并计数)所有重定向,其中url_stringalias相同,而user_id与登录用户相同。

我在用Codeigniter。

到目前为止,我正试图实现这样的目标:

代码语言:javascript
复制
$query=$this->db->query("SELECT * " . "FROM links, redirects " . "WHERE links.alias = redirects.url_string");

但我运气不好。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-01 12:20:14

JOIN这两个表如下所示:

代码语言:javascript
复制
SELECT 
  r.*
FROM redirects r
INNER JOIN links l ON r.url_string = l.alias;

更新:尝试如下:

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2013-01-01 12:27:16

为此,您可以将join用作:

代码语言:javascript
复制
$this->db->select('*');
    $this->db->from('links');
    $this->db->join('redirects', 'redirects.url_string = links.alias');
    $query = $this->db->get();

    return $query->result;

视图中,使用foreach语法显示数据库内容。

票数 1
EN

Stack Overflow用户

发布于 2013-01-01 13:52:22

正如您所说的,对于日志记录的用户来说,user_id应该是相同的,您也应该使用join with user_id来获取特定的user_id详细信息,所以您的查询应该如下:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14110352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档