 |
สอบถามคำสั่ง SQL เกี่ยวกับการ Select ข้อมูลออกมาและการ join ตารางกันมากกว่า 2 ตาราง |
|
 |
|
|
 |
 |
|
สวัสดีครับผมมีปัญหานิดหน่อยในการ select ข้อมูลออกมาให้แสดงตามที่ผมต้องการไม่ได้
รูปนี้คือฐานข้อมูลที่ส่วนหนึ่งของงานครับ

อันนี้คือ code sql กับ php ครับ
Code (PHP)
mysql_select_db($database_DB, $DB);
$query_AB = sprintf("SELECT db_C.C_name, concat(db_A.A_fname,' ',db_A.A_Lname) as SD
FROM db_A
LEFT OUTER JOIN db_ADD ON db_ADD.A_id = db_A.A_id
LEFT OUTER JOIN db_C ON db_C .C_id = db_ADD.C_id
LEFT OUTER JOIN db_B ON db_B.B_id = db_ADD .B_id
WHERE db_B.B_date = '2018-03-16' AND db_B.B_round = '1'
ORDER BY db_A.A_id asc");
$A_ALL = mysql_query($query_AB , $DB) or die(mysql_error());
$row_ALL = mysql_fetch_assoc($A_ALL );
$totalRows_ALL = mysql_num_rows($A_ALL );
do {
echo $row_ALL ['A_id'];
echo $row_ALL ['SD'];
echo $row_ALL ['C_name'];
} while ($row_ALL = mysql_fetch_assoc($A_ALL ));
ส่วนนี้คือผลที่ได้ออกมาครับ

ส่วนที่ผมอยากได้จริงๆคือรูปแบบนี้ครับ

จากภาพแรกที่ 2 โดยกำหนดเงื่อนไข่ให้ B_date = '2018-03-16' และ B_round ='1'
ผมควรเขียน code ยังไงครับ ให้มันแสดงแบบรูปที่ 3 อย่างเช่นแสดง
วันที่ 16 รอบที่ 1,2,3
วันที่ 17 รอบที่ 1,2,3
วันที่ 18 รอบที่ 1,2,3
วันที่ 19 รอบที่ 1,2,3
วันที่ 20 รอบที่ 1,2,3
วันที่ 21 รอบที่ 1,2,3
วันที่ 22 รอบที่ 1,2,3
Tag : PHP, MySQL
|
ประวัติการแก้ไข 2018-03-18 10:02:55 2018-03-18 10:05:27 2018-03-18 10:10:06 2018-03-18 10:11:05
|
 |
 |
 |
 |
Date :
2018-03-18 10:00:15 |
By :
tairatza |
View :
2020 |
Reply :
16 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (PHP)
WHERE db_B.B_date = '2018-03-16' AND db_B.B_round = '1'
// เปลี่ยน
// db_B.B_date as DateStart
// db_B.B_date as DateEnd
// db_B.B_round ไม่เอา เพราะว่า AND จริง และ จริง ได้ จริง
WHERE db_B.B_date = '2018-03-1'
AND db_B.B_date = '2018-03-19'
|
 |
 |
 |
 |
Date :
2018-03-19 08:27:55 |
By :
Hararock |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 1 เขียนโดย : Hararock เมื่อวันที่ 2018-03-19 08:27:55
รายละเอียดของการตอบ ::
B_date = 'x' and B_date=y แบบนี้ก็ไม่ได้ B_date มันมีค่าเดียว จะมี 2 ค่าเวลาเดียวกันไม่ได้
Code (SQL)
select a.A_id, concat(A_fname, ' ', A_Lname) as nm
, if(B_Date=d1 and B_round=1, cn, 0) as d1_1, if(B_Date=d1 and B_round=1, C_name, '') as cn_1_1
, if(B_Date=d1 and B_round=2, cn, 0) as d1_2, if(B_Date=d1 and B_round=2, C_name, '') as cn_1_2
, if(B_Date=d1 and B_round=3, cn, 0) as d1_3, if(B_Date=d1 and B_round=3, C_name, '') as cn_1_3
, if(B_Date=d2 and B_round=1, cn, 0) as d2_1, if(B_Date=d2 and B_round=1, C_name, '') as cn_2_1
, if(B_Date=d2 and B_round=2, cn, 0) as d2_2, if(B_Date=d2 and B_round=2, C_name, '') as cn_2_2
, if(B_Date=d2 and B_round=3, cn, 0) as d2_3, if(B_Date=d2 and B_round=3, C_name, '') as cn_2_3
from ( select *,'3/16/2018' as d1,'3/17/2018' as d2 from db_A) as a
left join (
select a.A_id, B_date, B_round, C_name, count(*) as cn
from db_ADD a
left join db_B b using B_id
left join db_C c using C_id
group by a.A_id, a.B_id, a.C_id
) as tc using A_id
ลองดู ไม่ได้เทสต์ และ วันที่ แปลงเอาเองนะ ลองค้นดู วิธีการแปลงวันที่
|
ประวัติการแก้ไข 2018-03-19 10:30:11
 |
 |
 |
 |
Date :
2018-03-19 10:11:45 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลืม เอาคำสั่งนี้ไปต่อท้าย ตัวอย่างด้วย
group by a.A_id
|
 |
 |
 |
 |
Date :
2018-03-19 15:02:14 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|