0
select文に結合しようとしているクエリは次のとおりです。何が間違っているのですか?これらのクエリでmysqlが何か選択文に結合しようとしていません
SELECT u.user_id,c.c_id,u.username,u.email, u.user_pic_path,c.time, G.file_name
FROM conversation c, users u
LEFT OUTER JOIN gallery G
ON U.user_pic_path = G.img_id
WHERE CASE
WHEN c.user_one =1
THEN c.user_two = u.user_id
WHEN c.user_two = 1
THEN c.user_one= u.user_id
END
AND (c.user_one =1 OR c.user_two = 1)
JOIN(SELECT R.time
FROM conversation_reply R
ORDER BY R.time DESC LIMIT 1)
ON R.c_id_fk = c.c_id
最初のクエリで2つのテーブルを結合します。
SELECT u.user_id,c.c_id,u.username,u.email, u.user_pic_path,c.time, G.file_name
FROM conversation c, users u
LEFT OUTER JOIN gallery G
ON U.user_pic_path = G.img_id
WHERE CASE
WHEN c.user_one = '$user_one'
THEN c.user_two = u.user_id
WHEN c.user_two = '$user_one'
THEN c.user_one= u.user_id
END
AND (c.user_one ='$user_one' OR c.user_two ='$user_one')
Order by UNIX_TIMESTAMP(C.time) DESC Limit 20";
最後に、単純なクエリです。
SELECT R.cr_id,R.time,R.reply
FROM conversation_reply R
WHERE R.c_id_fk = ?
ORDER BY R.cr_id DESC LIMIT 1"
ここで私は最後になりました。
$sql = "SELECT u.user_id,c.c_id,u.username,u.email, u.user_pic_path,G.file_name,
MAX(r.time) last_reply_time,r.reply
FROM conversation c
JOIN users u ON
CASE
WHEN c.user_one = 1
THEN c.user_two = u.user_id
WHEN c.user_two = 1
THEN c.user_one= u.user_id
END
JOIN conversation_reply r ON c.c_id = r.c_id_fk
LEFT OUTER JOIN gallery G ON U.user_pic_path = G.img_id
WHERE (c.user_one = 1 OR c.user_two = 1)
GROUP BY c.c_id ORDER BY last_reply_time DESC";
唯一のことは、最新のものではなく、最初の会話の返信を得ることです。
非常にいい友達です。私はこれを試してみる。まさに私が欲しいもの。会話の最新の返信今のところ、私は単純なクエリで「OK」です。私のSQLスキルを習得して習得するために、どのような資料や本をお勧めしますか? –
私は#1054を取得しています - 'フィールドリスト'に 'G.file_name'という不明な列があります –
次に、 'gallery'テーブルに' file_name'列はありません。テーブルのスキーマを見て、正しい列名を見つけてください。 – Barmar