0

「投稿」と「ユーザー」の 2 つのテーブルがあります。すべての投稿には、投稿したユーザー ID を取得するための「ref_id」列があります。

今、私はこの方法で投稿を取得しています:

$this->db->query("SELECT * FROM posts WHERE time > '$timeLimit' LIMIT 50");

すべての結果を結合してポスター関連のデータも取得する方法がわかりません。私が現在行っていることは、基本的にループ内のループであり、結果の foreach がユーザー情報を取得します。しかし、これが非常に間違っていることは明らかです。

どうやら結合を使い始める必要があるようですが、どうすればいいのでしょうか? これは非常に単純な例であると思います。

何か助けはありますか?ありがとうございました。

4

3 に答える 3

1
SELECT posts.*, users.* 
FROM posts 
INNER JOIN users 
  ON posts.posted_by = users.id;
于 2013-02-10T10:12:35.283 に答える
1

このような:

SELECT
  posts.*,,
  users.Username
FROM posts
INNER JOIN users ON posts.ref_id = users.user_id;

説明:

お互いにJOINどのテーブルにも、2つのことがあります。タイプとJOIN結合条件。結合には、主に次の 3 つのタイプがあります。

  • INNER JOIN、結合条件に一致する行のみが2つのテーブルから返され、それ以上の行はありません。しかし:

  • LEFT OUTER JOIN、2 つのテーブルを結合すると、一方は結合キーワードの左側にあり、もう一方は右側にあります。

    FROM Table1 <------------- これは左のテーブルです。LEFT OUTER JOIN table2 .... <-------------- これは右側のテーブルです。

LEFT OUTER JOIN左のテーブルの一致しない行が結果セットに含まれます。

  • RIGHT OUTER JOIN右側のテーブルの一致しない行が結果セットに含まれます。

  • CROSS JOINこれにより、2 つのテーブルからデカルト積が実行されます。

このクエリでは、列がテーブルを形成する列と等しいusers場合にのみ、クエリはテーブルからすべてのユーザーを返します。ref_iduser_idposts

詳細と説明については、次を参照してください。

于 2013-02-10T10:12:54.753 に答える
0
SELECT user.name
FROM users
INNER JOIN posts
ON posts.ref_id == user.id
AND posts.time > 50

http://www.w3schools.com/sql/sql_join_inner.asp

于 2013-02-10T10:14:52.110 に答える