 |
ขอความช่วยเหลือ ถ้ากรณี sql query ได้ผลลัพธ์ข้อมูลชุดที่ 1 สามารถนำข้อมูลนี้ที่ 1 มา query ต่อได้เลยหรือไม่แล้วเขียน sql อย่างไร |
|
 |
|
|
 |
 |
|
หมายถึงแบบนี้หรือเปล่า
Code (PHP)
$sql = "select * from tb1";
while($tb1=mysql_fetch_object($sql)){
$sql = mysql_query("select * from tb2 where id = $tb1->id");
///////
///////
///////
}
|
 |
 |
 |
 |
Date :
2014-03-20 09:23:26 |
By :
mangkunzo |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่มีข้อมูลในฐานข้อมูลแล้วจะไปคิวรี่อะไรครับ....ลองทบทวนแนวคิดใหม่...แล้วยก ตย. มาถาม...
เช่น ครั้งแรก select ได้ข้อมูลมาคือ หมู เห็ด เป็ด ไก่....
แล้วต้องการเอา หมู เห็ด เป็ด ไก่ ไปทำอะไรครับ....
ในความเห็นผม คำว่า คิวรี่ คือ ต้องไปกระทำอะไรสักอย่าง select insert update delete กับฐานข้อมูล
คิวรี่ที่คุณGuest ต้องการคือ อะไร อธิบายชัด ๆ ครับ
หรือ จะหมายถึง จัดกลุ่ม หรือ หาค่าอะไร จำเพาะ?? 
|
ประวัติการแก้ไข 2014-03-20 10:20:14
 |
 |
 |
 |
Date :
2014-03-20 10:19:08 |
By :
apisitp |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
สมมุติ ข้อมูลในตารางฐานข้อมูล tu_info
1 a 98
2 b 85
3 c 45
4 d 99
5 e 75
6 f 96
*** คิวรี่ชุดที่หนึ่งต้องการเอาข้อมูลเพียงจำนวน 3 แถว และเรียบข้อมูลจาก ตัวเลขคอลัมน์ที่ 3 จากมากไปหาน้อย
*** นำข้อมูลที่คิวรี่ชุดที่หนึ่งมาดึงข้อมูลอีกจำนวน 3 แถวเพื่อให้มีจำนวนแถวคู่กัน เรียงลำดับจากน้อยไปหามาก
ผลลัพธ์ที่ต้องการ
1 d 99 คู่กับ c 45
2 a 98 คู่กับ e 75
3 f 96 คู่กับ b 85
จะเขียนคิวรี่อย่างไร
|
 |
 |
 |
 |
Date :
2014-03-20 23:45:37 |
By :
GOP |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (MySQL)
SELECT a.rn1 AS ListNo, a.col1, a.col2, b.col1, b.col2
FROM (
SELECT a.*, @i := @i + 1 rn1
FROM yourTable a, (select @i := 0) lambda
ORDER BY Col2 DESC
) a
LEFT JOIN (
SELECT b.*, @j := @j + 1 rn2
FROM yourTable b, (select @j := 0) lambda
ORDER BY b.Col2 ASC
) b
ON a.rn1 = b.rn2 LIMIT 3
***** ลองทำความเข้าใจดูครับ (Tricks)
------ lambda แปลว่า อยู่ฯก็ลอยมา (เนื่องจาก MySQL ไม่มีฟังก์ชัน ROW_NUMBER() )
[x] ถ้าเป็นฝั่ง .NET lambda หมายถึง วิวัฒนาการขั้นสุงสุด (Delegate ---> Anonymous ---> Lambda)
---- Linq ถือว่าเป็นโหลนของ Lambda Expression เลยครับ
---- ความหมายเดียวกันนั่นคือคำว่า อยู่ฯก็ลอยมา
|
 |
 |
 |
 |
Date :
2014-03-21 08:39:02 |
By :
love9713 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (SQL SERVER)
SELECT a.rn1 AS ListNo, a.col1, a.col2, b.col1, b.col2
FROM (
SELECT TOP 3 *, ROW_NUMBER() OVER (ORDER BY a.Col2 DESC) rn1
FROM yourTable a
ORDER BY Col2 DESC
) a
LEFT JOIN (
SELECT TOP 3 *, ROW_NUMBER() OVER (ORDER BY b.Col2 ASC) rn2
FROM yourTable b
ORDER BY Col2 ASC
) b
ON a.rn1 = b.rn2
หรือ
Code (SQL)
SELECT TOP 3 a.rn1 AS ListNo, a.col1, a.col2, b.col1, b.col2
FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY a.Col2 DESC) rn1
FROM yourTable a
ORDER BY Col2 DESC
) a
LEFT JOIN (
SELECT *, ROW_NUMBER() OVER (ORDER BY b.Col2 ASC) rn2
FROM yourTable b
ORDER BY Col2 ASC
) b
ON a.rn1 = b.rn2
[x] โชคไม่ดีที่ MySQL ไม่มีฟังก์ชัน ROW_NUMBER()
นี่เป็นเหตุผลที่ผมไม่เคยหันมามอง MySQL
|
 |
 |
 |
 |
Date :
2014-03-21 08:43:54 |
By :
love9713 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ทางผมต้องขอบคุณนะครับ ได้ความรู้ใหม่ พร้อมทั้งได้โค้ด
ขอบคุณ love9713 มากจริงๆนะครับที่มาตอบกระทู้ผม
|
 |
 |
 |
 |
Date :
2014-03-21 08:49:45 |
By :
GOP |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอถามเพิ่มเติม แล้วกรณีที่ ข้อมูลไม่ได้จับคู่ คือ มีเศษ 1 แถว จะเขียน sql อย่างไร
|
 |
 |
 |
 |
Date :
2014-03-21 09:44:30 |
By :
GOP |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จาก #NO 10 ปั้นน้ำให้เป็นตัว (อยู่ฯก็ลอยมา) ซึ่ง
ผมอ้างถึง ปี ค.ศ. 2010 (Visual Studio 2010) มันสามารถทำได้ และ มันเก่าเกินไปแล้ว (ผมรู้สึกเช่นนั้น)
แต่ผมค่อนข้างจะมั่นใจว่ามันต้องทำได้แล้ว >= VS2010 หรือ ภาษาใดฯ ก็ตาม
1 Input ---> Multiple Output หรือเข้าใจได้ง่ายฯว่า #NO 10 ต้องเหลือแค่บรรทัดเดียว
ผมกลายเป็นคนตกสมัยไปแล้ว เอวัง
เสียดาย...
เสียดาย...
เสียดาย...
|
 |
 |
 |
 |
Date :
2014-03-21 13:57:11 |
By :
love9713 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|