簡體   English   中英

在兩個表上的Codeigniter中加入SQL嗎?

[英]SQL Join in Codeigniter on two tables?

我正在構建一個url縮短/重定向服務,我對如何最好地從兩個表中獲取數據感到有些困惑。

我有兩個這樣的表:

重新導向

id
datetime
ip_address
browser_agent
url_string

鏈接

id
alias
url
created
user_id

鏈接存儲鏈接的詳細信息,每當有一個重定向時,它就作為每個重定向的一行記錄在重定向表中。

鏈接中的 alias重定向中的url_string相同。 例如Dw4因此域名將為example.com/Dw4重定向到鏈接中url字段。

我要實現的目標是從重定向表中選擇(並計數)所有重定向,其中url_stringalias相同,然后user_id與登錄用戶相同。

我正在使用Codeigniter。

到目前為止,我正在嘗試這樣的事情:

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

但是我沒有運氣。

像這樣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;

您可以為此使用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語法foreach顯示db-contents。

就像您說的那樣,已登錄用戶的user_id應該相同,您還應該將join與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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM