我正在构建网址缩短/重定向服务,我对如何最好地从两个表中获取数据感到困惑。
我有两张桌子:
重定向
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
但我没有运气。
答案 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