0

重複の可能性:
2 つのテーブルにまたがる SQL SELECT

PHP と mysql で小さなフォーラムを構築したいと考えています。私は2つのテーブルを持っています:

forum_posts: id(Primary_Key),user_id(Foreign_Key),テキスト

ユーザー: id(Primary_key)、ユーザー名

ここで、すべてのフォーラム投稿を一覧表示し、各投稿に作成者を表示したいと考えています。

私の試み:

$mySQL_getPosts = mysql_query('SELECT * FROM forum_posts ORDER BY id ASC');

もちろん、これによりすべての投稿が表示されます。しかし、どうすれば自分のユーザー テーブルに接続できますか?

最後に、次のような投稿を表示したいと思います。

Username wrote: | Here goes the text from forum_posts 
4

5 に答える 5

2

必要なことは、2 つのテーブルを結合することです。あなたの場合、次のようになります。

SELECT f.text, u.username FROM forum_posts f JOIN user u ON (f.user_id = u.id)

SQL、特に結合について学びます。結合には多くの種類があり、そのうちのいくつかに出くわします。PHP + MySQL でフォーラムのような Web サイトを構築しようとしている場合、作成するほとんどのクエリには少なくとも 1 つの結合が含まれます。

于 2012-04-12T18:27:52.010 に答える
1

ここでJOINコマンドが役に立ちます。LEFT JOIN は、ユーザーが関連付けられていなくても、forum_posts からレコードを取得します。それができない場合、または匿名の投稿を投稿したくない場合は、LEFT 部分を削除してください。

SELECT f.*, u.username FROM forum_posts AS f LEFT JOIN user AS u ON f.id = u.id ORDER BY id ASC

于 2012-04-12T18:30:19.770 に答える
1

次のように、基本的な内部結合を使用して 2 つのテーブルをリンクできます。

SELECT username, text 
FROM forum_posts 
INNER JOIN user ON forum_posts.user_id = user.id 
ORDER BY id ASC

注: すべてではなく、テーブルから必要な列のみを選択することもお勧めします。

于 2012-04-12T18:34:13.267 に答える
1

2 つのテーブル間の関係を与えるには、mysql 結合を使用する必要があります。

forum_posts : id(Primary_Key),user_id(Foreign_Key),text[メインテーブル]

user : id(Primary_key), username[メイン テーブル ID を使用してこのテーブルを接続]

$sql_query_string = "Select fp.* from forum_posts as fp
>                      left join user as u on (u.id = fp.user_id)
>                      order by fp.id asc";
> 
> $result = mysql_query($sql_query_string);
> 
> While($data = mysql_fetch_row($result)){
>     echo "<pre>";print_r($result);"</pre>"; }

このクエリは、著者を表示するのに役立ちます

于 2012-04-12T18:38:19.043 に答える
1

これはオプションです:

SELECT FP.id,U.Username
FROM forum_posts FP, users U 
WHERE FP.user_id = U.id ORDER BY id ASC

私は何かを逃していますか?

でも参加したほうがいい

MySQL クエリで、where ではなく join を使用するのはなぜですか?

于 2012-04-12T18:26:40.823 に答える