4

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

我有两个这样的表:

重定向

id
datetime
ip_address
browser_agent
url_string

链接

id
alias
url
created
user_id

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

alias链接重定向url_string中是相同的。例如,域将被重定向到链接中的字段。Dw4example.com/Dw4url

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

我正在使用 Codeigniter。

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

$query=$this->db->query("SELECT * " . "FROM links, redirects " . "WHERE links.alias = redirects.url_string");

但我没有运气。

4

3 回答 3

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。

于 2013-01-01T12:27:16.477 回答
0

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-01T12:20:14.523 回答
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
于 2013-01-01T13:52:22.903 回答