4

URL 短縮/リダイレクト サービスを構築していますが、2 つのテーブルからデータを取得する最善の方法について少し混乱しています。

次のような2つのテーブルがあります。

リダイレクト

id
datetime
ip_address
browser_agent
url_string

リンク

id
alias
url
created
user_id

Linksにはリンクの詳細が保存され、リダイレクトごとに 1 つの行としてリダイレクトテーブルに記録されます。

aliasリンク内とリダイレクトurl_string内は同じです。たとえば、ドメインはリンク内のフィールドにリダイレクトされます。Dw4example.com/Dw4url

私が達成しようとしているのは、リダイレクトテーブルからすべてのリダイレクトを選択 (およびカウント)することです。url_stringaliasuser_id

コードイグナイターを使用しています。

これまでのところ、私は次のようなものを目指しています:

$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次のような2つのテーブル:

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はログに記録されたユーザーと同じでなければなりません。特定の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 に答える