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

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

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

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

กระทู้: 13



ดูรายละเอียด
« เมื่อ: 03 มิถุนายน 2019, 13:40:05 »

 อยากขอคำแนะนำ สมมุติมีเกมส์ให้สมาชิกเล่น เราต้องการนับคะแนนเฉพาะ 10 นัดล่าสุดของแต่ละคน(แต่ละคนเล่นไม่เท่ากันบางคน 15  บางคน 12 บางคน 10  ครั้ง)
แบบนี้เราเขียน SQL  ยังไง เอาแค่ 10 เกมส์ล่าสุดของทุกคน เป็น mysql นะ
บันทึกการเข้า
raykung
ก๊วนเสียว
*

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

กระทู้: 257



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 04 มิถุนายน 2019, 11:00:32 »

1. เรียกข้อมูล 10 เกมล่าสุดออกมาก่อน
โค๊ด:
SELECT `score` FROM `game` ORDER BY `id` DESC LIMIT 10

2. จับ Sum ซะโดยใช้ SELECT อีกอันครอบ
โค๊ด:
SELECT sum(`score`)
FROM (SELECT `score` FROM `game` ORDER BY `id` DESC LIMIT 10)
บันทึกการเข้า

darkknightza
เจ้าพ่อบอร์ดเสียว
*

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

กระทู้: 4,245



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 06 มิถุนายน 2019, 23:29:57 »

1. เรียกข้อมูล 10 เกมล่าสุดออกมาก่อน
โค๊ด:
SELECT `score` FROM `game` ORDER BY `id` DESC LIMIT 10

2. จับ Sum ซะโดยใช้ SELECT อีกอันครอบ
โค๊ด:
SELECT sum(`score`)
FROM (SELECT `score` FROM `game` ORDER BY `id` DESC LIMIT 10)

ขอเก็บด้วยคับ
บันทึกการเข้า

หาเงินวันละ350บาท มั่นคง จ่ายมาสิบปีแล้ว
หารายได้กับ popup เจ้านี้ เรทแรงคลิ๊ก
Hosting อันดับ 1 คุณภาพสูง ราคาถูก จัดเลย
โดเมนเนมสวยๆ ราคาถูก จดกับเราสิที่นี่
KeepGoing
Newbie
*

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

กระทู้: 27



ดูรายละเอียด
« ตอบ #3 เมื่อ: 07 มิถุนายน 2019, 17:41:46 »

ผมทำตัวอย่างให้นะครับ
โค๊ด:

CREATE TABLE game
(`ID` int, `member` VARCHAR(255),`score` int(11))
;

INSERT INTO game
(`ID`, `member`, `score`)
VALUES
(1, 'aaa', 11),
(2, 'bbb', 10),
(3, 'aaa', 11),
(4, 'aaa', 10),
(5, 'bbb', 10),
(6, 'aaa', 11),
(7, 'bbb', 10),
        (8, 'aaa', 11),
(9, 'bbb', 10),
(10, 'aaa', 11),
(11, 'aaa', 11),
(12, 'bbb', 10),
(13, 'aaa', 11),
(14, 'bbb', 10),
        (15, 'aaa', 10)
;

ถ้าต้องการผลรวม 10 รายการล่าสุดก็ใช้แบบนี้ครับ
โค๊ด:
SELECT sum(score)
FROM (SELECT ID,score FROM `game` ORDER BY ID DESC LIMIT 10) t1

ซึ่งผลที่ได้ก็จะเป็น score = 105

แต่ถ้าเราก็ดึงข้อมูลของสมาชิกนั้นๆออกมา ให้ใช้เงื่อนไขเพิ่มครับเป็น WHERE member = ? ซึ่ง LIMIT คือตัวกำหนดว่าดึงมาเท่าไหร่ โดยถ้าดึงแบบล่าสุดก็กำหนดเป็น DESC ครับ
โค๊ด:
SELECT sum(score)
FROM (SELECT ID,member,score FROM `game` WHERE member = 'aaa' ORDER BY ID DESC LIMIT 5) t1


ตามตัวอย่างผมรวมเฉพาะ 5 รายการล่าสุดนะครับ ก็จะได้ผลเป็น
ีmember aaa score 5 เกมล่าสุด = 54
member bbb score 5 เกมล่าสุด = 50
« แก้ไขครั้งสุดท้าย: 07 มิถุนายน 2019, 17:48:38 โดย KeepGoing » บันทึกการเข้า
livenow
Newbie
*

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

กระทู้: 13



ดูรายละเอียด
« ตอบ #4 เมื่อ: 07 มิถุนายน 2019, 22:44:23 »

ผมทำตัวอย่างให้นะครับ
โค๊ด:

CREATE TABLE game
(`ID` int, `member` VARCHAR(255),`score` int(11))
;

INSERT INTO game
(`ID`, `member`, `score`)
VALUES
(1, 'aaa', 11),
(2, 'bbb', 10),
(3, 'aaa', 11),
(4, 'aaa', 10),
(5, 'bbb', 10),
(6, 'aaa', 11),
(7, 'bbb', 10),
        (8, 'aaa', 11),
(9, 'bbb', 10),
(10, 'aaa', 11),
(11, 'aaa', 11),
(12, 'bbb', 10),
(13, 'aaa', 11),
(14, 'bbb', 10),
        (15, 'aaa', 10)
;

ถ้าต้องการผลรวม 10 รายการล่าสุดก็ใช้แบบนี้ครับ
โค๊ด:
SELECT sum(score)
FROM (SELECT ID,score FROM `game` ORDER BY ID DESC LIMIT 10) t1

ซึ่งผลที่ได้ก็จะเป็น score = 105

แต่ถ้าเราก็ดึงข้อมูลของสมาชิกนั้นๆออกมา ให้ใช้เงื่อนไขเพิ่มครับเป็น WHERE member = ? ซึ่ง LIMIT คือตัวกำหนดว่าดึงมาเท่าไหร่ โดยถ้าดึงแบบล่าสุดก็กำหนดเป็น DESC ครับ
โค๊ด:
SELECT sum(score)
FROM (SELECT ID,member,score FROM `game` WHERE member = 'aaa' ORDER BY ID DESC LIMIT 5) t1


ตามตัวอย่างผมรวมเฉพาะ 5 รายการล่าสุดนะครับ ก็จะได้ผลเป็น
ีmember aaa score 5 เกมล่าสุด = 54
member bbb score 5 เกมล่าสุด = 50

ขอบคุณครับที่อุตสาห์ทำตัวอย่าง แต่ผลลัพธ์ที่ต้องการยังไม่ได้ ต้องการรันครั้งเดียวแล้วได้ทุกยูซเซอร์และคะแนนคู่กันครับ ผลลัพธ์ประมาณ

aaa ->54
bbb ->50
ccc ->49
บันทึกการเข้า
CherryX
หัวหน้าแก๊งเสียว
*

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

กระทู้: 2,052



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 07 มิถุนายน 2019, 22:59:02 »

ขอตามเก็บด้วย ขอบคุณคะ   wanwan017
บันทึกการเข้า

***ลายเซ็นสูงเกินขนาด
adverwild
Newbie
*

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

กระทู้: 71



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 08 มิถุนายน 2019, 11:19:40 »

  #table
 no|score|player


  
โค๊ด:
$strSQL = "SELECT * FROM table GROUP BY player";   //ดึงรายชื่อผู้เล่นทุกคน
   $objQuery = $mysqli->query($strSQL);

   while($objResult = mysqli_fetch_array($objQuery,MYSQLI_ASSOC)){

           $player = $objResult["player"];
           echo "player = ".$player;

           $strSQL2 = "SELECT *,SUM(score) AS value_sum FROM table WHERE player='$player' order by no DESC LIMIT 10";     //บวกคะแนนของแต่ละคน 10 นัดล่าสุด โดยเรียงตาม  no จากมากไปน้อย
           $objQuery2 = $mysqli->query($strSQL2);
           while($objResult2 = mysqli_fetch_array($objQuery2,MYSQLI_ASSOC)){
          
            
               echo "Score = ".$objResult2["value_sum"]."<br>";

          }

  }

ยังไม่ได้ทดสอบนะครับ  wanwan017 wanwan017
« แก้ไขครั้งสุดท้าย: 08 มิถุนายน 2019, 11:20:20 โดย adverwild » บันทึกการเข้า

www.adverwild.com โปรแกรมการตลาด

1.โพสท์เว็บบอร์ด
2.โพสท์ facebook ปั้มไลค์ 
3.adverwild facebook tools ตัวช่วยสำหรับ Facebook
ช่วยเพิ่มยอดขาย เพิ่มการเข้าถึงลูกค้า
munz4
Newbie
*

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

กระทู้: 55



ดูรายละเอียด
« ตอบ #7 เมื่อ: 08 มิถุนายน 2019, 12:12:32 »

คิดว่าอาจจะช่วยได้
https://www.w3schools.com/sql/...=trysql_select_groupby_orderby
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์