 |
มีข้อมูล 2 ตาราง ตารางที่ 1 เก็บวันที่ตั้งกระทู้ ตารางที่ 2 เก็บวันที่ตอบกระทุ้ จะทำการ Order by อย่างไรหากมีสองฟิวด์ที่ต้องการให้มันเรียง |
|
 |
|
|
 |
 |
|
มีข้อมูล 2 ตาราง ตารางที่ 1 เก็บวันที่ตั้งกระทู้ ตารางที่ 2 เก็บวันที่ตอบกระทุ้ ทำการ เรียงวันที่จากมากไปหาน้อยอย่างไร
tbl_webboard
QuestionID,Question,Detail,Name ,CreateDate ,View,Reply
tbl_Reply
ReplyID,Question,Details,Name,DateReply
ปัญหา
ผมทำการจอยสองตารางเข้าด้วยกัน และ order by CreateDate มันก็จะเรียง จากวันที่ตั้งกระทุ้เท่านั้น
และถ้า Order by DateReply มันก็จะเรียง จากเวลาที่ตอบกระทู็เท่านั้น
คำถามอาจจะงง เอาเป็นว่า หลักการคล้ายๆ กับหน้า https://www.thaicreate.com/topic/forum.html
ถ้ามีการตั้งกระทุ้ใหม่มันจะบนสุด และถ้ามีการตอบกระทุ้มันก็จะอยู่บนสุด
จะมีวิธีไหนบ้างครับ
Tag : PHP
|
ประวัติการแก้ไข 2014-08-12 08:54:23 2014-08-12 08:59:00 2014-08-12 09:00:30 2014-08-12 15:48:54
|
 |
 |
 |
 |
Date :
2014-08-12 08:49:23 |
By :
Zakariya |
View :
1009 |
Reply :
9 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (SQL)
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
|
 |
 |
 |
 |
Date :
2014-08-12 09:13:23 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ใช้ SQL Server 2008
Code (SQL)
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.
|
 |
 |
 |
 |
Date :
2014-08-12 09:44:50 |
By :
Zakariya |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
1.จากคำสั่ง
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
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).
เกิดจากอะไรหรอครับ
ต้องขอโทษที่ถามมากไปหน่อย ผมไม่ค่อยถนัด SQL 55
รบกวนอีกนิดน่ะครับ
|
 |
 |
 |
 |
Date :
2014-08-12 11:22:19 |
By :
Zakariya |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
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
ลบวงเล็บออกผิดที่อะครับ ต้องลบตัวหลังออก ที่ครอบmax ถูกแล้วครับ แต่ตัว coalesce ด้านหลังมันเกินมา
ผมก๊อปด้านบนลงมาเลยผิดสองที่
แก้เป็น
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 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
|
ประวัติการแก้ไข 2014-08-12 14:25:01
 |
 |
 |
 |
Date :
2014-08-12 14:11:42 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
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
|
 |
 |
 |
 |
Date :
2014-08-12 18:13:10 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|