HOME > PHP > PHP Forum > มีข้อมูล 2 ตาราง ตารางที่ 1 เก็บวันที่ตั้งกระทู้ ตารางที่ 2 เก็บวันที่ตอบกระทุ้ จะทำการ Order by อย่างไรหากมีสองฟิวด์ที่ต้องการให้มันเรียง
มีข้อมูล 2 ตาราง ตารางที่ 1 เก็บวันที่ตั้งกระทู้ ตารางที่ 2 เก็บวันที่ตอบกระทุ้ จะทำการ Order by อย่างไรหากมีสองฟิวด์ที่ต้องการให้มันเรียง
ผมทำการจอยสองตารางเข้าด้วยกัน และ order by CreateDate มันก็จะเรียง จากวันที่ตั้งกระทุ้เท่านั้น
และถ้า Order by DateReply มันก็จะเรียง จากเวลาที่ตอบกระทู็เท่านั้น
select tb1.id, tb1.topic_name, COALEASCE( max(tb2.replydate), tb1.cratedate))
from tb1 left join tb2 on tb2.topic_id=tb1.id
group by tb1.id
order by COALEASCE( max(tb2.replydate), tb1.cratedate)) desc
select tblWebboard.QuestionID, tblWebboard.Question, COALEASCE( max(tblReply.ReplyDate), tblWebboard.CreateDate))
from tblWebboard left join tblReply on tblReply.QuestionID=tblWebboard.QuestionID
group by tblWebboard.QuestionID
order by COALEASCE( max(tblReply.ReplyDate), tblWebboard.CreateDate)) desc
เกิด Error 'COALEASCE' is not a recognized built-in function name.
select
tblWebboard.QuestionID,
tblWebboard.Question,
COALESCE( max(tblReply.ReplyDate), tblWebboard.CreateDate)) as last_date
from tblWebboard
left join tblReply on tblReply.QuestionID=tblWebboard.QuestionID
group by tblWebboard.QuestionID
order by COALESCE( max(tblReply.ReplyDate), tblWebboard.CreateDate)) desc
select
tblWebboard.QuestionID,
tblWebboard.Question,
COALESCE( max(tblReply.ReplyDate), tblWebboard.CreateDate)) as last_date
from tblWebboard
left join tblReply on tblReply.QuestionID=tblWebboard.QuestionID
group by tblWebboard.QuestionID
order by COALESCE( max(tblReply.ReplyDate), tblWebboard.CreateDate)) desc
เกิด Error Incorrect syntax near ')'.
2.แก้เป็น Code (SQL)
select
tblWebboard.QuestionID,
tblWebboard.Question,
COALESCE( max(tblReply.ReplyDate), tblWebboard.CreateDate) as last_date
from tblWebboard
left join tblReply on tblReply.QuestionID=tblWebboard.QuestionID
group by tblWebboard.QuestionID
order by COALESCE( max(tblReply.ReplyDate), tblWebboard.CreateDate) desc
เกิด Error Msg 8120, Level 16, State 1, Line 3
Column 'tblWebboard.Question' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Msg 207, Level 16, State 1, Line 4
Invalid column name 'ReplyDate'.
Msg 207, Level 16, State 1, Line 4
Invalid column name 'ReplyDate'.
Msg 207, Level 16, State 1, Line 8
Invalid column name 'ReplyDate'.
Msg 207, Level 16, State 1, Line 8
Invalid column name 'ReplyDate'.
3.แก้เป็น Code (SQL)
select
tblWebboard.QuestionID,
tblWebboard.Question,
COALESCE( max(tblReply.ReplyDate, tblWebboard.CreateDate)) as last_date
from tblWebboard
left join tblReply on tblReply.QuestionID=tblWebboard.QuestionID
group by tblWebboard.QuestionID
order by COALESCE( max(tblReply.ReplyDate, tblWebboard.CreateDate)) desc
เกิด Error The max function requires 1 argument(s).
select
tblWebboard.QuestionID,
tblWebboard.Question,
COALESCE( max(tblReply.ReplyDate), tblWebboard.CreateDate)) as last_date
from tblWebboard
left join tblReply on tblReply.QuestionID=tblWebboard.QuestionID
group by tblWebboard.QuestionID
order by COALESCE( max(tblReply.ReplyDate, tblWebboard.CreateDate)) desc
select
tblWebboard.QuestionID,
tblWebboard.Question,
COALESCE( max(tblReply.ReplyDate), tblWebboard.CreateDate) as last_date
from tblWebboard
left join tblReply on tblReply.QuestionID=tblWebboard.QuestionID
group by tblWebboard.QuestionID
order by last_date desc
พอดีเห็นเป็น SQLServer
Code (SQL)
select
QuestionID,
Question,
COALESCE( tmp.ldate, CreateDate) as last_date
from tblWebboard
left join ( select QuestionID as id, max(ReplyDate) as ldate from tblReply group by QuestionID ) as tmp
on tmp.id=tblWebboard.QuestionID
order by last_date desc
select QuestionID,Question,Details,Name,Viewa,Reply,
COALESCE( tmp.ldate, CreateDate) as last_date
from tblWebboard
left join ( select QuestionID as id, max(DateReply) as ldate from tblReply group by QuestionID ) as tmp
on tmp.id=tblWebboard.QuestionID
order by last_date desc
select tblWebboard.QuestionID,
Question,
Details,
Name,
Viewa,
Reply, NameReply,
COALESCE( tmp.ldate, CreateDate) as last_date
from tblWebboard
left join (
select max(replyID) m_id, QuestionID as id, max(DateReply) as ldate
from tblReply group by QuestionID
) as tmp
on tmp.id=tblWebboard.QuestionID left join tblReply on tblReply.replyID=tmp.m_id
order by last_date desc