 |
ปัญหาการ เรียงข้อมูล ordey by รบกวนด้วยครับ ขอบคุณครับ |
|
 |
|
|
 |
 |
|
order by substring(w_id, -4) desc , cast( substring(w, 1, length(w_id)-5) as unsigned) desc
ปล. ลืมบอก ที่ จขกท จัดเรียง มันเป็นจัดเรียงตาม อักษร โดยเอาสัปดาห์ขึ้นก่อน
ไม่ได้จัดเรียง ด้วย ปี สัปดาห์
|
ประวัติการแก้ไข 2014-11-12 14:34:00
 |
 |
 |
 |
Date :
2014-11-12 14:25:07 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แบบง่ายๆ ครับ
$strSQL = "SELECT * FROM brief_work WHERE user_id ='$user_id' AND w_type='1' ORDER BY LPAD(w_id, 10, '0') ASC" ;
|
 |
 |
 |
 |
Date :
2014-11-12 14:26:56 |
By :
FRINGE |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณมากครับ ได้แล้วครับ 
|
 |
 |
 |
 |
Date :
2014-11-12 14:38:00 |
By :
codingman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 2 เขียนโดย : FRINGE เมื่อวันที่ 2014-11-12 14:26:56
รายละเอียดของการตอบ ::
select
cast(substring(w, 1, length(w)-5) as unsigned) c,
cast(substring(w, -4) as unsigned) b
from (
select '12/2557' w
union all select '14/2557'
union all select '14/2556'
union all select '141/2556'
union all select '14/2555'
union all select '13/2555'
) t
order by lpad(w, 10, '0') desc
มันได้ แบบนี้ครับ
c b
141 2556
14 2557
14 2556
14 2555
13 2555
12 2557
lapd ผมไม่เคยใช้นะครับ เลยนำไปลอง แต่มันได้ตาม ข้างบนน่ะครับ
|
 |
 |
 |
 |
Date :
2014-11-12 14:42:46 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คุณลอง asc หรือยังครับ
select
cast(substring(w, 1, length(w)-5) as unsigned) c,
cast(substring(w, -4) as unsigned) b,
lpad(w, 10, '0')
from (
select '12/2557' w
union all select '14/2557'
union all select '14/2556'
union all select '141/2556'
union all select '14/2555'
union all select '13/2555'
) t
order by lpad(w, 10, '0') asc

ผมว่าคุณยังไม่เข้าใจ การเรียงด้วยตัวอักษร กับ ปี เดือน วัน นะครับ
|
 |
 |
 |
 |
Date :
2014-11-12 14:52:41 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
lpad เป็นการเติมเต็มช่องว่าง ของ string ที่สั้น ด้วย อักขระที่เรากำหนด เป็นการจัดเรียงตามอักษร ปกติ
แต่ จขกท มี ปี มาเป็นตัวต่อท้ายด้วย ถ้าแค่ปีเดียว ก็คงไม่มีปัญหาอะไร แต่ถ้าหลายปี มันเรียงไม่ได้ครับ
|
 |
 |
 |
 |
Date :
2014-11-12 14:59:47 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมลองด้วยการสร้างตารางเก็บข้อมูลจริงๆ ครับ


|
 |
 |
 |
 |
Date :
2014-11-12 15:01:31 |
By :
FRINGE |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|

โค้ดผมใช้ไม่ได้นะครับ ขออภัยจขกท.ด้วย
|
 |
 |
 |
 |
Date :
2014-11-12 15:09:28 |
By :
FRINGE |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ทำไมไม่ ออกแบบโครงสร้างให้ง่ายต่อการทำงานอะครับ
ใน Database เก็บเป็น
weekString(varchar) , numOfWeeek(int), ofYear:(int) ก็เก็บ index ไว้ด้วย
1/2557 ,1 ,2557
2/2557 ,2,2557
3/2557 ,3 ,2557
เอาแบบนี้ง่ายกว่าไหมครับ ? จะได้ไม่ต้องใช้ function lpad ให้วุ่นวาย ลำพังแค่ Order by ก็ทำให้ข้อมูลช้าอยู่แล้ว ยังจะใช้ function อีก ระวังจะไปกันใหญ่นะครับ
เอาจริงแล้วก็ใช้แค่
numOfWeeek(int), OfYear:(int) ก็เก็บ index ไว้ด้วย
1 ,2557
2,2557
3 ,2557
พอใช้งานจริง ก็แค่เอา 2 column นี้มาให้ php ต่อ String กัน echo $week+"/"+$year อะไรแบบนี้
คราวนี้จะ order by อะไรก็แค่ Orderby NumOfWeek ASC,ofYear ASC
|
 |
 |
 |
 |
Date :
2014-11-12 16:45:58 |
By :
LindyFralin |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|

เห็นเขาอัพตัวอย่าง เอามั่ง
|
 |
 |
 |
 |
Date :
2014-11-12 17:00:17 |
By :
LindyFralin |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณครับ จะไปปรับปรุงแก้ไขครับ
|
 |
 |
 |
 |
Date :
2014-11-13 09:04:09 |
By :
codingman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|