我正在构建一个url缩短/重定向服务,我对如何最好地从两个表中获取数据感到困惑。
我有两张这样的桌子:
重定向
id
datetime
ip_address
browser_agent
url_string链接
id
alias
url
created
user_id链接存储链接详细信息,每次重定向时,它都记录在重定向表中,作为每个重定向的一行。
alias in links和url_string in 重定向是相同的。例如,Dw4,因此域将是example.com/Dw4 -重定向到links中的url字段。
我试图实现的是从重定向表中选择(并计数)所有重定向,其中url_string与alias相同,而user_id与登录用户相同。
我在用Codeigniter。
到目前为止,我正试图实现这样的目标:
$query=$this->db->query("SELECT * " . "FROM links, redirects " . "WHERE links.alias = redirects.url_string");但我运气不好。
发布于 2013-01-01 12:20:14
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;发布于 2013-01-01 12:27:16
为此,您可以将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语法显示数据库内容。
发布于 2013-01-01 13:52:22
正如您所说的,对于日志记录的用户来说,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.idhttps://stackoverflow.com/questions/14110352
复制相似问题