0

私は2つのテーブルを持っています

表 1 はドキュメントのリストです。

ドキュメント:

+-------------+---------------+
| document_ID | document_name |
+-------------+---------------+
|    1        |   test.pdf    |
+-------------+---------------+
|    2        |  other.pdf    |
+-------------+---------------+

表 2 は、その文書を使用したユーザーのリストです。これは 1 対 1 の関係です。つまり、ユーザーはドキュメントを 1 回しか使用しません (またはまったく使用しません)。

ドキュメント_ユーザー:

+-------------+---------------+-----------+---------------+
| document_ID | user_ID       | has_read  | (other stuff) |
+-------------+---------------+-----------+---------------+
|    1        |   5           |     1     |      stuff    |
+-------------+---------------+-----------+---------------+
|    1        |   7           |     1     |      stuff    |
+-------------+---------------+-----------+---------------+
|    2        |   5           |     1     |      stuff    |
+-------------+---------------+-----------+---------------+

ユーザーがリストを閲覧しているときに、すべてのドキュメントを表示できるようにする必要があります。さらに、アクセス権があるかどうかを示します

たとえば、上記の例のユーザー 5 の望ましい出力は次のとおりです。

+-------------+---------------+-----------+---------------+
| document_ID | document_name |  has_read | (other stuff) |
+-------------+---------------+-----------+---------------+
|    1        |   test.pdf    |     1     |      stuff    |
+-------------+---------------+-----------+---------------+
|    2        |  other.pdf    |     1     |      stuff    |
+-------------+---------------+-----------+---------------+

ユーザー7の望ましい出力は

+-------------+---------------+-----------+---------------+
| document_ID | document_name |  has_read | (other stuff) |
+-------------+---------------+-----------+---------------+
|    1        |   test.pdf    |     1     |   stuff       |
+-------------+---------------+-----------+---------------+
|    2        |  other.pdf    |           |               |
+-------------+---------------+-----------+---------------+

の行に沿って結合を試みました

$this->db->join('documents_users', 'documents_users.document_ID = documents.document_ID');
$this->db->where('documents_users.user_ID', '7');
return $this->get_all();

しかし、これは has_read=1 のレコードのみを返します

問題は「where」コマンドにあることがわかりますが、どうすればよいかわかりません。

4

2 に答える 2

1

フィルター基準が句user_IDではなく結合条件に移動された (左) 外部結合が必要です。WHERE

$this->db->join(
   'documents_users',
   'documents_users.document_ID = documents.document_ID
AND documents_users.user_ID = 7',
   'left'
);
于 2012-08-29T13:26:59.783 に答える
0

STRAIGHT_JOINを取る必要があります:

SELECT a.document_ID, a.document_name, b.has_read,
FROM documents a 
     STRAIGHT_JOIN documents_users b
WHERE b.user_ID = 7;
于 2012-08-29T13:07:47.650 に答える