2013-01-01 4 views
4

URL 단축/리다이렉트 서비스를 구축 중이며 두 테이블에서 데이터를 얻는 방법에 대해 혼란 스럽습니다.SQL 두 테이블에서 Codeigniter에 가입 하시겠습니까?

나는 두 개의 테이블과 같이 있습니다

id 
datetime 
ip_address 
browser_agent 
url_string 

링크

id 
alias 
url 
created 
user_id 

링크 저장 링크 세부 사항을 이제까지 리디렉션 y 시간에 리다이렉트되면 각 리디렉션에 대해 단일 행으로 테이블을 리디렉션합니다. 에서 링크url_string에서

alias이 같은 리디렉션합니다. 예 : Dw4 도메인이 example.com/Dw4 일 때 url 필드로 리디렉션됩니다. user_id은 로그인 한 사용자와 동일한 어디를 달성하기 위해 노력하고있어

모두 리디렉션 에서 url_stringalias 다음과 동일 테이블을 리디렉션 선택 (및 계산)하는 것입니다.

나는 Codeigniter를 사용하고 있습니다.

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

을하지만 난 운이없는거야 :

지금까지 I는 다음과 같이 갈 것을 시도하고있다. 그래서 같은

답변

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

OK, 사용자가 만든 모든 링크를 나열하려고합니다. 따라서 링크에서 user * $ 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 구문을 사용하여 db-contents를 요구 사항으로 표시하십시오.

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 
관련 문제