ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: livenow ที่ 03 มิถุนายน 2019, 13:40:05



หัวข้อ: เขียนคำสั่ง SQL แบบนี้ยังไง
เริ่มหัวข้อโดย: livenow ที่ 03 มิถุนายน 2019, 13:40:05
 อยากขอคำแนะนำ สมมุติมีเกมส์ให้สมาชิกเล่น เราต้องการนับคะแนนเฉพาะ 10 นัดล่าสุดของแต่ละคน(แต่ละคนเล่นไม่เท่ากันบางคน 15  บางคน 12 บางคน 10  ครั้ง)
แบบนี้เราเขียน SQL  ยังไง เอาแค่ 10 เกมส์ล่าสุดของทุกคน เป็น mysql นะ


หัวข้อ: Re: เขียนคำสั่ง SQL แบบนี้ยังไง
เริ่มหัวข้อโดย: 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)


หัวข้อ: Re: เขียนคำสั่ง SQL แบบนี้ยังไง
เริ่มหัวข้อโดย: darkknightza ที่ 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)

ขอเก็บด้วยคับ


หัวข้อ: Re: เขียนคำสั่ง SQL แบบนี้ยังไง
เริ่มหัวข้อโดย: 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


หัวข้อ: Re: เขียนคำสั่ง SQL แบบนี้ยังไง
เริ่มหัวข้อโดย: livenow ที่ 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


หัวข้อ: Re: เขียนคำสั่ง SQL แบบนี้ยังไง
เริ่มหัวข้อโดย: CherryX ที่ 07 มิถุนายน 2019, 22:59:02
ขอตามเก็บด้วย ขอบคุณคะ   :wanwan017:


หัวข้อ: Re: เขียนคำสั่ง SQL แบบนี้ยังไง
เริ่มหัวข้อโดย: adverwild ที่ 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:


หัวข้อ: Re: เขียนคำสั่ง SQL แบบนี้ยังไง
เริ่มหัวข้อโดย: munz4 ที่ 08 มิถุนายน 2019, 12:12:32
คิดว่าอาจจะช่วยได้
https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_groupby_orderby