ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingรบกนทีครับ เขียน code แสดงลำดับจาก sql อ่ะครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: รบกนทีครับ เขียน code แสดงลำดับจาก sql อ่ะครับ  (อ่าน 2874 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
$100perday
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 324
ออฟไลน์ ออฟไลน์

กระทู้: 2,032



ดูรายละเอียด
« เมื่อ: 15 สิงหาคม 2012, 14:15:57 »

ตารางมีข้อมูลดังนี้ครับ

1 | mr.john | win
2 | mr.john | lost
3 | mrs.kik | lost
4 | mr.john | win

ต้องการเขียน sql ให้แสดงลำดับตามนี้ครับ

Level    Name     win      lost
1          mr.john   2          1
2          mrs.kik    0          1

ขอบคุณครับ  wanwan017
บันทึกการเข้า

เหนื่อย..
ohmohm
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 170
ออฟไลน์ ออฟไลน์

กระทู้: 3,099



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 15 สิงหาคม 2012, 14:54:36 »

คอลัมน์ Level หาวิธีต่อยอดเองนะครับ หรือคนอื่นมาช่วยหน่อย
สมมติคอลัมน์ของเทเบิลนั้นชื่อ name กับ result นะครับ เทเบิลชื่อ tbl

select name , sum(case when result = 'win' then 1 else 0 end) as win , sum(case when result = 'lost' then 1 else 0 end) as lost from tbl
group by name
order by sum(case when result = 'win' then 1 else 0 end) , sum(case when result = 'lost' then 1 else 0 end)
บันทึกการเข้า
kungbest
สมุนแก๊งเสียว
*

พลังน้ำใจ: 86
ออฟไลน์ ออฟไลน์

กระทู้: 670



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 15 สิงหาคม 2012, 15:02:16 »

คอลัมน์ Level หาวิธีต่อยอดเองนะครับ หรือคนอื่นมาช่วยหน่อย
สมมติคอลัมน์ของเทเบิลนั้นชื่อ name กับ result นะครับ เทเบิลชื่อ tbl

select name , sum(case when result = 'win' then 1 else 0 end) as win , sum(case when result = 'lost' then 1 else 0 end) as lost from tbl
group by name
order by sum(case when result = 'win' then 1 else 0 end) , sum(case when result = 'lost' then 1 else 0 end)

ตามนั้นคับ แต่เปลี่ยนตรง order เป็น order by win,lost desc ได้เลยคับ เพราะตั้งชื่อให้มันใหม่แล้ว
บันทึกการเข้า

$100perday
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 324
ออฟไลน์ ออฟไลน์

กระทู้: 2,032



ดูรายละเอียด
« ตอบ #3 เมื่อ: 15 สิงหาคม 2012, 15:17:17 »

ขอบคุณมากครับ

ลืมบอกไปว่า

1 | mr.john | win
2 | mr.john | lost
3 | mrs.kik | lost
4 | mr.john | win

ค่าแรกเป็นฟิลด์ id , ส่วนชื่อ mr.john , mrs,kik ชื่อฟิลด์คือ membername และ win กับ lost เก็บเป็นข้อความครับ ชือ่ฟิลด์คือ resultgame

ไม่ทราบ code ด้านบนจะ support ตรงนี้เปล่าครับ

 wanwan017 wanwan017
บันทึกการเข้า

เหนื่อย..
$100perday
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 324
ออฟไลน์ ออฟไลน์

กระทู้: 2,032



ดูรายละเอียด
« ตอบ #4 เมื่อ: 15 สิงหาคม 2012, 15:26:50 »

ยกมาให้ดูครับ ยิ่งเขียนยิ่งงง ขอบคุณมากครับ  wanwan017 wanwan004

โค๊ด:
<?
$page = $_GET['page'];


$select_type = "select usermem , sum(case when resultgame = 'win' then 1 else 0 end) as win , sum(case when resultgame = 'lost' then 1 else 0 end) as lost from playgame
group by username order by sum(case when resultgame = 'win' then 1 else 0 end) , sum(case when resultgame = 'lost' then 1 else 0 end)";
//$select_type="select DISTINCT usermem from playgame where resultgame = 'win' order by resultgame desc";
$query_select=mysql_query($select_type);
$num_rows=mysql_num_rows($query_select);

if($num_rows<1){
echo "<br><br><center><font color=#666666 face=tahoma size=2><b>ยังไม่มีการเพิ่มข้อมูลค่ะ</b></font></center>";
}else{
$select="select usermem , sum(case when resultgame = 'win' then 1 else 0 end) as win , sum(case when resultgame = 'lost' then 1 else 0 end) as lost from playgame
group by username order by sum(case when resultgame = 'win' then 1 else 0 end) , sum(case when resultgame = 'lost' then 1 else 0 end)";
$q_ry = mysql_query($select);
$num_rows=mysql_num_rows($q_ry);
  $pagesize=5;
$rt=$num_rows%$pagesize;
if($rt!=0)
{
$totalpage=floor($num_rows/$pagesize)+1;
}
else
{
$totalpage=floor($num_rows/$pagesize);
$toppic_id=1;
}
if(empty($page))
{
$page=1;
}
mysql_free_result($q_ry);
$goto=($page-1)*$pagesize;
$sql_select_mem="select usermem , sum(case when resultgame = 'win' then 1 else 0 end) as win , sum(case when resultgame = 'lost' then 1 else 0 end) as lost from playgame
group by username order by sum(case when resultgame = 'win' then 1 else 0 end) , sum(case when resultgame = 'lost' then 1 else 0 end) limit $goto,$pagesize";
$fect=mysql_query($sql_select_mem);
if(!$fect)
{
("ติดต่อฐานข้อมูลไม่ได้".mysql_error());
exit;
}

  $bgcount=0;
while($rows=mysql_fetch_array($fect))
{
$idgamep =$rows['id'];
$memberplay = $rows['usermem'];
$bgcount=$bgcount+1;
$bgmod=$bgcount%2;
if($bgmod==0){
$bgcolor="#DFD5A9";
}else{
$bgcolor="#BBF1E0";
}
?>
                                        <table width="100%" border="0" cellspacing="1" cellpadding="1">
                                          <tr bgcolor="#FFFFFF">
                                            <td width="8%" height="29" bgcolor="<? echo "$bgcolor"; ?>">
                                              <div align="center"></div></td>
                                            <td width="38%" bgcolor="<? echo "$bgcolor"; ?>">
                                              <div align="center"><font color="#333333" size="2">
                                                <? echo "$memberplay"; ?>
                                                </font></div></td>
                                            <td width="18%" bgcolor="<? echo "$bgcolor"; ?>">
                                              <div align="center"><font color="#333333" size="2">
                                                </font></div></td>
                                            <td width="15%" bgcolor="<? echo "$bgcolor"; ?>">&nbsp;</td>
                                            <td width="21%" bgcolor="<? echo "$bgcolor"; ?>">
                                              <div align="center"><font color="#333333" size="2">
                                                </font></div></td>
                                          </tr>
                                        </table>
                                        <?
}
}
?>
บันทึกการเข้า

เหนื่อย..
Extra Cash
สมุนแก๊งเสียว
*

พลังน้ำใจ: 268
ออฟไลน์ ออฟไลน์

กระทู้: 631



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 15 สิงหาคม 2012, 15:36:22 »

ยกมาให้ดูครับ ยิ่งเขียนยิ่งงง ขอบคุณมากครับ  wanwan017 wanwan004

โค๊ด:
<?
$page = $_GET['page'];


$select_type = "select usermem , sum(case when resultgame = 'win' then 1 else 0 end) as win , sum(case when resultgame = 'lost' then 1 else 0 end) as lost from playgame
group by username order by sum(case when resultgame = 'win' then 1 else 0 end) , sum(case when resultgame = 'lost' then 1 else 0 end)";
//$select_type="select DISTINCT usermem from playgame where resultgame = 'win' order by resultgame desc";
$query_select=mysql_query($select_type);
$num_rows=mysql_num_rows($query_select);

if($num_rows<1){
echo "<br><br><center><font color=#666666 face=tahoma size=2><b>ยังไม่มีการเพิ่มข้อมูลค่ะ</b></font></center>";
}else{
$select="select usermem , sum(case when resultgame = 'win' then 1 else 0 end) as win , sum(case when resultgame = 'lost' then 1 else 0 end) as lost from playgame
group by username order by sum(case when resultgame = 'win' then 1 else 0 end) , sum(case when resultgame = 'lost' then 1 else 0 end)";
$q_ry = mysql_query($select);
$num_rows=mysql_num_rows($q_ry);
   $pagesize=5;
$rt=$num_rows%$pagesize;
if($rt!=0)
{
$totalpage=floor($num_rows/$pagesize)+1;
}
else
{
$totalpage=floor($num_rows/$pagesize);
$toppic_id=1;
}
if(empty($page))
{
$page=1;
}
mysql_free_result($q_ry);
$goto=($page-1)*$pagesize;
$sql_select_mem="select usermem , sum(case when resultgame = 'win' then 1 else 0 end) as win , sum(case when resultgame = 'lost' then 1 else 0 end) as lost from playgame
group by username order by sum(case when resultgame = 'win' then 1 else 0 end) , sum(case when resultgame = 'lost' then 1 else 0 end) limit $goto,$pagesize";
$fect=mysql_query($sql_select_mem);
if(!$fect)
{
("ติดต่อฐานข้อมูลไม่ได้".mysql_error());
exit;
}

 $bgcount=0;
while($rows=mysql_fetch_array($fect))
{
$idgamep =$rows['id'];
$memberplay = $rows['usermem'];
$bgcount=$bgcount+1;
$bgmod=$bgcount%2;
if($bgmod==0){
$bgcolor="#DFD5A9";
}else{
$bgcolor="#BBF1E0";
}
?>
                                        <table width="100%" border="0" cellspacing="1" cellpadding="1">
                                          <tr bgcolor="#FFFFFF">
                                            <td width="8%" height="29" bgcolor="<? echo "$bgcolor"; ?>">
                                              <div align="center"></div></td>
                                            <td width="38%" bgcolor="<? echo "$bgcolor"; ?>">
                                              <div align="center"><font color="#333333" size="2">
                                                <? echo "$memberplay"; ?>
                                                </font></div></td>
                                            <td width="18%" bgcolor="<? echo "$bgcolor"; ?>">
                                              <div align="center"><font color="#333333" size="2">
                                                </font></div></td>
                                            <td width="15%" bgcolor="<? echo "$bgcolor"; ?>">&nbsp;</td>
                                            <td width="21%" bgcolor="<? echo "$bgcolor"; ?>">
                                              <div align="center"><font color="#333333" size="2">
                                                </font></div></td>
                                          </tr>
                                        </table>
                                        <?
}
}
?>

select usermem กับ group by username ต้องเป็นฟิลด์เดียวกันครับ ถ้าตามที่บอกด้านบนก้ต้องเป็น
select membername กับ group by membername ครับ
« แก้ไขครั้งสุดท้าย: 15 สิงหาคม 2012, 15:39:02 โดย Extra Cash » บันทึกการเข้า

$100perday
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 324
ออฟไลน์ ออฟไลน์

กระทู้: 2,032



ดูรายละเอียด
« ตอบ #6 เมื่อ: 15 สิงหาคม 2012, 16:06:11 »

เอาตารางมาให้ดูครับ


จากข้อมูลในตาราง ถ้านับ usermem

จะต้องเรียงตามนี้อ่ะครับ

Usermem      Win     Lost
user1             3         0
test                2         0
user               0         3

ถ้ารันตาม code ด้านบน จะแสดง

user
test
user1

อ่ะครับ ไท่ทราบว่าเขียนผิดตรงไหน และเราสามารถดึงจำนวน win และ lost ออกมาเป็นจำนวนตัวเลขได้ยังไงครับ
รบกวนอีกครั้งนะครับ
« แก้ไขครั้งสุดท้าย: 15 สิงหาคม 2012, 16:06:32 โดย $100perday » บันทึกการเข้า

เหนื่อย..
ARMXY
Newbie
*

พลังน้ำใจ: 13
ออฟไลน์ ออฟไลน์

กระทู้: 80



ดูรายละเอียด
« ตอบ #7 เมื่อ: 15 สิงหาคม 2012, 16:23:21 »

Count แล้ว Join ครับ
ไม่ทราบว่าดีที่สุดมั้ย แต่รีบๆผมก็ทำแบบนี้นะ

1.
โค๊ด:
SELECT usermem,COUNT(ID) AS WinAmount FROM [TABLE] WHERE resultgame = 'win' GROUP BY usermem
2.
โค๊ด:
SELECT usermem,COUNT(ID) AS LostAmount FROM [TABLE] WHERE resultgame = 'lost' GROUP BY usermem


สองอันนี้ไป Create viewไว้เพื่อความรวดเร็วครับ คำสั่ง Create view คือ
โค๊ด:
CREATE VIEW [VIEWNAME] AS [SELECT_STATEMENT]

สมมุติ Create view ชื่อ WinSum,LostSum ตามลำดับนะครับทีนี้เวลาจะใช้งานก็

โค๊ด:
SELECT w.usermem,w.WinAmount,l.LostAmount FROM WinSum w JOIN LostSum l ON w.usermem = l.usermem
บันทึกการเข้า
Extra Cash
สมุนแก๊งเสียว
*

พลังน้ำใจ: 268
ออฟไลน์ ออฟไลน์

กระทู้: 631



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 15 สิงหาคม 2012, 18:15:42 »

เอาตารางมาให้ดูครับ


จากข้อมูลในตาราง ถ้านับ usermem

จะต้องเรียงตามนี้อ่ะครับ

Usermem      Win     Lost
user1             3         0
test                2         0
user               0         3

ถ้ารันตาม code ด้านบน จะแสดง

user
test
user1

อ่ะครับ ไท่ทราบว่าเขียนผิดตรงไหน และเราสามารถดึงจำนวน win และ lost ออกมาเป็นจำนวนตัวเลขได้ยังไงครับ
รบกวนอีกครั้งนะครับ



เปลี่ยนที่ Order by ครับ ตามนี้
order by
sum(case when resultgame = 'win' then 1 else 0 end) DESC,
sum(case when resultgame = 'lost' then 1 else 0 end) ASC
บันทึกการเข้า

AbuseMan
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 104
ออฟไลน์ ออฟไลน์

กระทู้: 1,104



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 15 สิงหาคม 2012, 18:23:15 »

แทน test ด้วยชื่อตารางที่ใช้งานอ่ะครับ

โค๊ด:
SELECT a.usergame,
(SELECT COUNT(*) FROM `test` b WHERE b.result = 'win' AND b.usergame = a.usergame) as win ,
(SELECT COUNT(*) FROM `test` c WHERE c.result = 'lose' AND c.usergame = a.usergame) as lose
FROM `test` a
GROUP BY a.usergame
ORDER BY win DESC, lose ASC
บันทึกการเข้า

ฟังเพลงออนไลน์ : เว็บเพลงออนไลน์ที่คุณขอฟังเพลงได้ด้วยตัวคุณเอง
ห้องแชท : บริการฟรีห้องแชทสำหรับติดเว็บ
เพลงใหม่ : เพลงใหม่ เพลงฮิต
บ้านคุ้มค่า : ลงประกาศขายบ้าน ที่ดิน พร้อมอัพเดทโครงการบ้านและคอนโดใหม่ที่น่าสนใจ
หน้า: [1]   ขึ้นบน
พิมพ์