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

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

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

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

กระทู้: 487



ดูรายละเอียด เว็บไซต์
« เมื่อ: 10 พฤษภาคม 2012, 16:30:36 »

ผมมีอยู่ตารางดังนี้(ยกตัวอย่างครับ)
ตาราง A มี 3
DATE         ID1     ID2           ค่า
01/05/55   A001   01          100
02/05/55   A001   02            80
03/05/55   A002                   70
04/05/55   A003   01             20
05/05/55   A003   01             40
..............................................
ตาราง B มี 3
ID1    ID2      NAME
A001            หมู
A001 01        เห็ด
A001 02        เป็ด
A002             ไก่
A003              แมว
A003 01         ลิง
..........................................................
ผลลัพธ์ที่ต้องคือ
A001                หมู       
A001   01          เห็ด       100
A001   02          เป็ด       80
A002                ไก่         70
A003                แมว
A003   01          ลิง         60
..........................................................
คำถามครับ --ใช้ Query ใน access
1.ทำอย่างไงให้ได้แบบผลลัพธ์ครับผมทำไม่ได้..งมมาหลายวันแล้วไม่ได้สักที
   - ที่มันติดก็คือมันเหมือนใช้คีย์หลัก 2 key    ID1,ID2 เวลาเลือกมาทั้งคู่นำมาโยงกันผลลัพธ์มันไม่ได้ที่ต้องการมันจะได้เฉพาะค่าที่ทั้งสองมันเหมือนกัน
  - เวลาเลือกเอาเฉพาะ ID1,ID2 เลือกโยงคีย์อันเดียว..ใันก็ไม่ได้อีก...งงงง
 wanwan017
บันทึกการเข้า

fogza
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,307



ดูรายละเอียด
« ตอบ #1 เมื่อ: 10 พฤษภาคม 2012, 18:11:43 »

ถ้าจะเอาตามตัวอย่างที่ยกมาก็ query 2 รอบใช้ตาราง B เป็นหลัก
รอบที่ 1
โค๊ด:
$B = "SELECT * FROM B";
...
while($result_B = mysql_fetch_assoc(...))
{
echo"<tr>
     <td>$result_B[ID1]</td>
     <td>$result_B[ID2]</td>
";
รอบ 2
โค๊ด:
$A = "SELECT ค่า FROM A WHERE ID1 = {$result_B[ID1]} AND ID2 = {$result_B[ID2]}";
...
$count_A = mysql_num_row(...);
if($count_A != 0){
   $result_A = mysql_fetch_assoc(...);
   echo"<td>{$result_A[ค่า]}</td>";
}else{echo"<td></td>}
echo"</tr>";
}//end while
ประมาณนี้ครับ เขียนแบบบ้านๆ ผิดพลาดตรงไหนเพิ่มเติมด้วยครับ  wanwan019  wanwan026
บันทึกการเข้า

:: สังคมจะดีได้ อยู่ที่เราทุกคน ไม่ใช่แค่ใครคนใดคนหนึ่ง ::
arthorn796
Newbie
*

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

กระทู้: 29



ดูรายละเอียด
« ตอบ #2 เมื่อ: 10 พฤษภาคม 2012, 19:54:51 »

อ่า ตามความคิดผมไม่น่าจะ Query ได้นะ
ถ้าได้คงต้องเทพมาก หรือไม่ก็เส้นผมบังภูเขา

แต่ถ้าเป็นผม ผมจะเอา Table ที่เป็น Master ของ ID เนี่ย มาช่วยเป็น Main แล้วเอา Table พวกนี้ Join เข้าไป
เพราะดูจาก Table ที่มีแล้ว ไม่มี Primary Key ที่จะอ้างเป็นหลักได้เลย
ตามความคิดผมนะครับ

ผิดพลาดประการใด ก็มั่วๆไปนะ  Tongue Tongue
บันทึกการเข้า
thaikorn04
ก๊วนเสียว
*

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

กระทู้: 487



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 10 พฤษภาคม 2012, 20:41:07 »

ดันครับ Tongue
บันทึกการเข้า

Jupitor
ก๊วนเสียว
*

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

กระทู้: 286



ดูรายละเอียด
« ตอบ #4 เมื่อ: 10 พฤษภาคม 2012, 20:47:39 »

table 1 primary key คืออะไร
table 2 primary key คืออะไร
forienge คีย์คืออะไร

คำตอบคือ ไม่มีเลย

แบบนี้เขียน query ไม่ได้ครับ
ลองออกแบบ table ใหม่ก่อนดีกว่า
ถ้าแก้ไข  filed ไม่ได้ ก็สร้าง field ใหม่เอาไว้เป็น primary key และ forienge คีย์ครับ
บันทึกการเข้า

thaikorn04
ก๊วนเสียว
*

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

กระทู้: 487



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 10 พฤษภาคม 2012, 22:55:30 »

table 1 primary key คืออะไร
table 2 primary key คืออะไร
forienge คีย์คืออะไร

คำตอบคือ ไม่มีเลย

แบบนี้เขียน query ไม่ได้ครับ
ลองออกแบบ table ใหม่ก่อนดีกว่า
ถ้าแก้ไข  filed ไม่ได้ ก็สร้าง field ใหม่เอาไว้เป็น primary key และ forienge คีย์ครับ

table 1 primary key ไม่มีครับเป็นข้อมูลรายวันครับ
table 2 primary key คือID1และID2 ครับ
...........................................
ถ้าแก้ไข  filed ไม่ได้ ก็สร้าง field ใหม่เอาไว้เป็น primary key และ forienge คีย์ครับ
 - แก้ไม่ได้ครับ..มันเป็นข้อมูลดั้งเดิมครับ..ผมผู้มาทีหลังครับ..และก็เก็บมาหลายปีแล้วครับ
บันทึกการเข้า

Extra Cash
สมุนแก๊งเสียว
*

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

กระทู้: 631



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 10 พฤษภาคม 2012, 23:06:28 »

ลองตามนี้ครับ

SELECT ID1, ID2, MAX(NNAME) AS NAME, SUM(VAL ) AS [VALUE]
FROM (
SELECT  B.ID1, B.ID2, B.NNAME, VAL
FROM A RIGHT  JOIN B ON A.ID1 = B.ID1 AND A.ID2 = B.ID2
UNION
SELECT A.ID1, A.ID2, B.NNAME, VAL
FROM A LEFT JOIN B ON (A.ID2 = B.ID2) AND (A.ID1 = B.ID1)
WHERE A.ID2 IS NULL
)
GROUP BY ID1, ID2
บันทึกการเข้า

thaikorn04
ก๊วนเสียว
*

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

กระทู้: 487



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 11 พฤษภาคม 2012, 08:14:23 »

ลองตามนี้ครับ

SELECT ID1, ID2, MAX(NNAME) AS NAME, SUM(VAL ) AS [VALUE]
FROM (
SELECT  B.ID1, B.ID2, B.NNAME, VAL
FROM A RIGHT  JOIN B ON A.ID1 = B.ID1 AND A.ID2 = B.ID2
UNION
SELECT A.ID1, A.ID2, B.NNAME, VAL
FROM A LEFT JOIN B ON (A.ID2 = B.ID2) AND (A.ID1 = B.ID1)
WHERE A.ID2 IS NULL
)
GROUP BY ID1, ID2
ลองแล้วครับแต่ยังไม่ได้ครับ..เกือบได้ครับ
ค่าของ A003  01  มันไม่ค่ามาครับ
แต่ยังไงก็ขอบคุณมากครับ....เดี๊ยวผมไล่บวก +1 ให้ทุกคนครับ
บันทึกการเข้า

thaikorn04
ก๊วนเสียว
*

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

กระทู้: 487



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 11 พฤษภาคม 2012, 09:32:09 »

ได้บทสรุปแล้วครับ...สร้างฟิวใหม่เพิ่มทั้งสองฝั่ง..โดยฟิวใหม่เอา ID1+ID2...ขอบคุณครับทุกความคิดเห็น
บันทึกการเข้า

soonnew
คนรักเสียว
*

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

กระทู้: 198



ดูรายละเอียด
« ตอบ #9 เมื่อ: 16 พฤษภาคม 2012, 18:21:14 »

น่าจะใช้ table1 right join table2 
« แก้ไขครั้งสุดท้าย: 16 พฤษภาคม 2012, 18:22:36 โดย soonnew » บันทึกการเข้า
MeenyFancy
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,270



ดูรายละเอียด
« ตอบ #10 เมื่อ: 16 พฤษภาคม 2012, 19:05:00 »

โทษทีครับเพิ่งเห็นว่าเป็นข้อมูลเก่า

SELECT * FROM TableA Inner Join TableB on TableA.ID1 = TableB.ID1

แค่นี้ก็น่าจะออกนะครับ


« แก้ไขครั้งสุดท้าย: 16 พฤษภาคม 2012, 19:11:07 โดย MeenyFancy » บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์