2013-01-01 74 views
4

我正在構建一個URL縮短/重定向服務,我對如何最好地從兩個表中獲取數據感到有點困惑。SQL在兩張桌子上加入Codeigniter?

我有像這樣的兩個表:

重定向

id 
datetime 
ip_address 
browser_agent 
url_string 

鏈接

id 
alias 
url 
created 
user_id 

鏈接將鏈路的細節和不斷y的時間有一個重定向它記錄在重定向表作爲每個重定向的單行。

alias鏈接url_string重定向是相同的。例如Dw4所以域名將是example.com/Dw4 - 重定向到url字段鏈接

我試圖做到的,是選擇(和計數)全部由重定向重定向表,其中url_string是一樣alias,然後在那裏user_id是一樣的登錄用戶。

我正在使用Codeigniter。

到目前爲止,我試圖去這樣的事情:

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

,但我有沒有運氣。

回答

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; 
+0

確定這加入他們完美。但是,我將如何處理鏈接表。我的意思是每個鏈接加載一行而不是每個重定向一個? –

+0

@Chris你能解釋一下從這兩張表格中究竟選擇什麼嗎?對於你在你的問題中發佈的例子,example.com/Dw4應該如何從這兩個表中選擇,exampl.com是來自哪個字段?謝謝。 –

+0

好吧,我試圖做的是列出用戶創建的所有鏈接,所以選擇*從用戶= $ uid鏈接。然後在該表中,我還希望能夠根據重定向表中的數據提供鏈接的重定向數量。謝謝 –

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語法將數據庫內容顯示爲您的要求。

0

正如你說,USER_ID應該是相同的登錄用戶,你應該使用 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