2

フォーラムを作成していますが、結合が多い SQL 選択に問題があります。異なるユーザーの 2 つの画像を同じ行に表示したいと考えています。

ユーザーの最初の画像はトピックを書いたユーザーで、2 番目の画像は最後に返信したユーザーです。

私が構築するクエリ:

SELECT 
posts.*, users.photo, users.displayname FROM posts 
JOIN users ON(posts.useraid = users.id)
JOIN users ON(posts.lastreply = user.id)
WHERE forumid='$forumid' and type='post' ORDER BY `timee` DESC
  • posts.lastreply = 最後の返信ユーザーの ID。
4

4 に答える 4

3

AS次のキーワードを使用して、各テーブルのエイリアスを指定する必要があります。

SELECT posts.*, 
    u1.photo AS creatorPhoto, u1.displayname AS creatorName, 
    u2.photo AS replierPhoto, u2.displayname AS replierName
FROM posts 
JOIN users AS u1 ON(posts.useraid = u1.id)
JOIN users AS u2 ON(posts.lastreply = u2.id)
WHERE forumid= @forumid and type='post' 
ORDER BY `timee` DESC

usersテーブルの各インスタンスを異なる名前u1で呼び出す方法に注目してくださいu2creatorPhotoまた、同じ名前の 2 つの列 (例:と)を区別するために、列の別名をどのように指定したかにも注目してreplierPhotoください。このようにして、名前を PHP 連想配列の インデックスとして使用できます$post['creatorPhoto']

はい、インライン変数をパラメータに変更しました。ヒントにしてください。:-D

于 2013-03-01T16:31:04.823 に答える
1

句にエイリアスがないことに加えて、 and句fromにも問題がある可能性があります。そこの列にはエイリアスを使用する必要があります。whereorder by

それらがどこから来たのかはわかりませんが、次のようなものです。

WHERE posts.forumid='$forumid' and posts.type='post'
ORDER BY posts.`timee` DESC

すべてが から来ていると仮定しますposts

于 2013-03-01T16:31:23.823 に答える
1

これを機能させるにはエイリアスが必要です

SELECT 
posts.*, u1.photo, u1.displayname, u2.photo, u2.displayname FROM posts 
JOIN users u1 ON posts.useraid = u1.id
JOIN users u2 ON posts.lastreply = u2.id
WHERE forumid='$forumid' and type='post' ORDER BY `timee` DESC
于 2013-03-01T16:31:49.500 に答える
1
SELECT posts.*, author.photo as author_photo, author.displayname as author+name,
       replier.photo as replier_photo, replier.displayname as replier_name
FROM posts 
  JOIN users author ON(posts.useraid = users.id)
  JOIN users replier ON(posts.lastreply = user.id)
WHERE forumid='$forumid' and type='post' ORDER BY `timee` DESC
于 2013-03-01T16:33:06.907 に答える