เขียนคำสั่ง SQL แบบนี้ยังไง

เริ่มโดย livenow, 03 มิถุนายน 2019, 13:40:05

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

livenow

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

raykung

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)

[direct=https://www.seogointer.com/viewforum.php?f=2]แจกไฟล์ฟรี Themeforest.com / แจกคูปองส่วนลด Name.com[/direct]

darkknightza

อ้างถึงจาก: raykung ใน 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)


ขอเก็บด้วยคับ
[direct=http://make-more-moneyy.blogspot.com/2012/10/adfly.html]หาเงินวันละ350บาท มั่นคง จ่ายมาสิบปีแล้ว[/direct]
[direct=https://www.popads.net/users/refer/519628]หารายได้กับ popup เจ้านี้ เรทแรงคลิ๊ก[/direct]
Hosting อันดับ 1 คุณภาพสูง ราคาถูก จัดเลย[direct=https://support.hostneverdie.com/aff.php?aff=504][/direct]
โดเมนเนมสวยๆ ราคาถูก จดกับเราสิ[direct=https://my.thaidatahosting.com/aff.php?aff=227]ที่นี่

KeepGoing

#3
ผมทำตัวอย่างให้นะครับ


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

livenow

อ้างถึงจาก: KeepGoing ใน 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

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

aaa ->54
bbb ->50
ccc ->49

CherryX

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

adverwild

#6
  #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:
www.adverwild.com โปรแกรมการตลาด

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

munz4