 |
โจทย์หินๆ หาคนช่วยด้วยครับท่าน SQL query C#,VB,PHP ฯลฯ |
|
 |
|
|
 |
 |
|
ชื่อตาราง คู่แข่งขัน
----รหัสรายการ-------รอบที่------คู่ที่-------ชื่อผู้เล่น
-------1--------------------1-----------1----------A
-------1--------------------1-----------1----------B
-------1--------------------1-----------2----------C
-------1--------------------1-----------2----------D
-------1--------------------1-----------3----------E
-------1--------------------1-----------3----------F
-------1--------------------2-----------1----------A
-------1--------------------2-----------1----------C
-------1--------------------2-----------2----------B
-------1--------------------2-----------2----------E
-------1--------------------2-----------3----------D
-------1--------------------2-----------3----------F
ผมมีความจำเป็น ต้องรู้ว่า ใครเคยแข่งกับใครมาบ้างในแต่ละรอบโดยเก็บข้อมูลเป็นอาเรย์ดังนี้ครับ
Array ของ ชื่อผู้เช่น (ชื่อผู้เล่น รอบที่ 1 ,ชื่อผู้เล่น รอบที่ 2,.....รอบที่ N)
จากตารางจะได้ผลลัพดังนี้
A(B,C)
B(A,E)
C(D,A)
D(C,F)
F(E,D)
ช่วยเขียนโค๊ดในการคิวรี่ขี้นมาให้ด้วยครับ(database: ms sql server ครับ)
ภาษาอะไรก็ได้ครับ
ขอขอบคุณล่วงหน้าครับ
Tag : PHP, MySQL, Ms SQL Server 2005, Web (ASP.NET), VB.NET, C#
|
|
 |
 |
 |
 |
Date :
2010-09-15 00:20:14 |
By :
kanitin |
View :
1516 |
Reply :
12 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
การบ้าน? 
|
 |
 |
 |
 |
Date :
2010-09-15 01:02:20 |
By :
PlaKriM |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
สวัสดีครับ
บอกก่อนเลยว่า หากออกแบบ database ได้ครอบคลุม และเหมาะสม มากเท่าไหร่ ตัว code ยิ่งเขียนง่ายครับ
การออกแบบ database จะต้องนำข้อมูลมาวิเคราะห์ก่อนว่าต้องมี field อะไรบ้าง เช่น
1. การแข่ง อะไร?
2. รายละเอียดที่จำเป็นต้องมีอะไรบ้าง
จำเป็นต้องเก็บเป็นแบบ array มั้ย?
ขึ้นอยู่กับการออกแบบ
หากเป็น requirement เช่น การบ้าน (โดน อ. บังคับ ToT ) ก็คงต้องก้มหน้าทำต่อไป
|
 |
 |
 |
 |
Date :
2010-09-15 02:15:51 |
By :
winphp |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่มีใครช่วยได้บ้างเลยหรือครับ
|
 |
 |
 |
 |
Date :
2010-09-15 09:11:07 |
By :
kanitin |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เหมือนจะเป็นการบ้าน เพราะถ้าเป็นงานคงปรับเปลี่ยนให้ง่ายกว่านี้ไปและ ถ้าเป็นการบ้าน ควรจะทำเองจะได้เริ่มหัดคิดด้วยตัวเองด้วย
|
 |
 |
 |
 |
Date :
2010-09-15 09:21:58 |
By :
salapao_codeman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมเชื่อว่า คงไม่ใช่การบ้าน
เรื่องตารางการแข่งขัน เคยเห็น คุณดุนยา เคยทำนะ แต่ตอนนี้ไม่รู้ไปใหนแล้ว
|
 |
 |
 |
 |
Date :
2010-09-15 09:35:44 |
By :
deawx |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมนั่งคิดมาเป็นเดือนแล้วครับ ช่วยที ไขปริศนาให้ด้วยครับ
|
 |
 |
 |
 |
Date :
2010-09-15 10:08:30 |
By :
kanitin |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
serialize ข้อมูลลงตารางก็ได้นี่ครับ ไม่ก็แค่เก็บ id แยกไว้ก็ได้
ผมเองไม่ค่อยถนัดด้าน database relationship หรอก
คิวรี่หลายครั้งก็ได้คับ ถ้าจำเป็น
|
 |
 |
 |
 |
Date :
2010-09-15 10:23:04 |
By :
pjgunner.com |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ในเมื่อมีหนึ่งความเห็นบอกว่าไม่ใช่การบ้านก้อโอเคค่ะ
ติงนิดนึงคุณอาจจะบอก structure ของ table ไม่หมด
หรืออาจจะอยู่ในรูปแบบนี้จริงๆ มันทำให้ query ยาวขึ้นน่ะค่ะ
ถ้าเพียงแต่เพิ่ม id แบบ unique key เข้ามาจะเขียนสั้นลงไปเยอะค่ะ
ก็ไม่ได้จัดว่ายากอะไรนะคะ พี่ๆที่นี่แทบจะทุกคนคงทำได้ select แลัวก้อ join เท่านั้นเอง
ทั้งหมดนี่ทำบน mysql นะคะ ค่อยไปปรับเอาตาม table ของคุณละกัน
Code (PHP)
DROP TABLE IF EXISTS `test`.`myMatch`;
CREATE TABLE `test`.`myMatch` (
`id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`tournament_id` int(10) null,
`rounded` int(10) null,
`sequence` int(10) null ,
`player` varchar(100) null,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=tis620;
insert into myMatch( `tournament_id` ,`rounded` ,`sequence` ,`player`)
VALUES
(1,1,1,'A') ,
(1,1,1,'B') ,
(1,1,2,'C') ,
(1,1,2,'D') ,
(1,1,3,'E') ,
(1,1,3,'F') ,
(1,2,1,'A') ,
(1,2,1,'C') ,
(1,2,2,'B') ,
(1,2,2,'E') ,
(1,2,3,'D') ,
(1,2,3,'F') ;
select * from `myMatch` ;
-- PKEY REF BY ALL KEY IN TABLE
select Q2.* ,'\n'
FROM
(
SELECT * from `myMatch`
WHERE `Player`='A'
) AS Q1
LEFT JOIN `myMatch` AS Q2
ON (Q1.`tournament_id`=q2.`tournament_id`)
AND (q1.`rounded` = q2.`rounded`)
AND (q1.`sequence` = q2.`sequence`)
AND (q1.`player` <> q2.`player`)
ORDER BY q2.`tournament_id` ,q2.`rounded` ,q2.`sequence`
INTO OUTFILE 'd:\mymatch.output..txt';
-- ที่เอาท์พุทออกไฟล์เพราะ ไม่อยาก capscreen ให้ดูค่ะ ตอนนี้ run สารพัดเดวเครื่องจะ hang
ผลลัพธ์
0000000042 1 1 1 B
0000000048 1 2 1 C
และชุดใหญ่
Code (PHP)
SELECT qPlayer.player
,qR1comp.Opponent AS `O1`
,qR2comp.Opponent AS `O2`
FROM
(
SELECT DISTINCT `player` from `mymatch`
) AS qPlayer
LEFT JOIN
(
-- **************************************
-- FIND PLAYER VS OPPENET WITH ROUNDED 01
-- **************************************
SELECT qR1Player.player AS player
,QOpponentR1.player AS `Opponent`
FROM
(
SELECT DISTINCT player from mymatch
) AS qR1Player
LEFT JOIN
(
SELECT * FROM `myMatch`
WHERE `rounded`= 1
) AS QR1
ON (qR1Player.player = QR1.player)
LEFT JOIN
(
SELECT * FROM `myMatch`
WHERE `rounded`= 1
) AS QOpponentR1
ON (qR1Player.player <> QOpponentR1.player)
AND (QR1.player <> QOpponentR1.player)
AND (QR1.sequence = QOpponentR1.sequence)
-- **************************************
) AS qR1Comp
ON (qPlayer.Player = qR1Comp.player)
LEFT JOIN
(
-- **************************************
-- FIND PLAYER VS OPPENET WITH ROUNDED 02
-- **************************************
SELECT qR2Player.player AS player
,QOpponentR2.player AS `Opponent`
FROM
(
SELECT DISTINCT player from mymatch
) AS qR2Player
LEFT JOIN
(
SELECT * FROM `myMatch`
WHERE `rounded`= 2
) AS QR2
ON (qR2Player.player = QR2.player)
LEFT JOIN
(
SELECT * FROM `myMatch`
WHERE `rounded`= 2
) AS QOpponentR2
ON (qR2Player.player <> QOpponentR2.player)
AND (QR2.player <> QOpponentR2.player)
AND (QR2.sequence = QOpponentR2.sequence)
-- **************************************
) AS qR2Comp
ON (qPlayer.Player = qR2Comp.player)
INTO OUTFILE 'd:\player and opponent.txt' ;
ผลลัพธ์
A B C
B A E
C D A
D C F
E F B
F E D
ออกแบบ table ได้หละหลวมค่ะ
ถ้า normalized หน่อยจะเขียนสั้นเข้าใจง่ายกว่านี้
อีกอย่างวันนี้เพิ่งเป็นไข้มามะคืน เบลอๆนิดๆค่ะ
|
ประวัติการแก้ไข 2010-09-15 13:45:39 2010-09-15 13:49:30 2010-09-15 13:52:16
 |
 |
 |
 |
Date :
2010-09-15 12:51:49 |
By :
blurEyes |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อยากให้น้องพราวมาสอนพี่จริงๆ 
|
 |
 |
 |
 |
Date :
2010-09-16 13:44:56 |
By :
pjgunner.com |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|